protected void Button1_Click(object sender, EventArgs e)
{
        SqlConnection con = new SqlConnection(str);

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "Companyregister";
        cmd.Parameters.AddWithValue("@Company_name", txtname.Text);
        cmd.Parameters.AddWithValue("@Register_no", txtreg_no.Text);
        cmd.Parameters.AddWithValue("@Type", DropDownList1.Text);
        cmd.Parameters.AddWithValue("@Address", txtadrs.Text);
        cmd.Parameters.AddWithValue("@Email", txtemail.Text);
        cmd.Parameters.AddWithValue("@Contact_no", txtphone.Text);

        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
        Response.Write("Register succesful");
}

Хранимая процедура:

CREATE PROCEDURE [dbo].Companyregister
    @Company_name varchar(50),
    @Register_no varchar(50),
    @Type varchar(50),
    @Address varchar(50),
    @Email varchar(50),
    @Contact_no varchar(50)
AS
    insert into company_reg (Company_name, Register_no, Type, Address, Email, Contact_no) 
    values (@Company_name, @Register_no, @Type, @Address, @Email, @Contact_no)

    RETURN 0

Ошибка:

Исключение типа System.Data.SqlClient.SqlException произошло в System.Data.dll, но не было обработано в пользовательском коде

Дополнительная информация: строковые или двоичные данные будут усечены.

1
kapo 7 Сен 2016 в 06:25

3 ответа

Лучший ответ

Следующая ошибка указывает на то, что одно или несколько полей данных НЕ помещаются в поле БД. Например, ваш адрес может состоять из 60 символов, но размер вашей БД для него составляет всего 50 символов.

Строка или двоичные данные будут проигнорированы.

Чтобы решить эту проблему, сначала проверьте, соответствуют ли данные, которые вы вставляете, размерам, определенным в вашей БД. Чтобы легче это понять, определите параметры хранимой процедуры следующим образом:

cmd.Parameters.Add("@Company_name", SqlDbType.VarChar, 50).Value = txtname.Text;
cmd.Parameters.Add("@Register_no", SqlDbType.VarChar, 50).Value = txtreg_no.Text;
cmd.Parameters.Add("@Type", SqlDbType.VarChar, 50).Value = DropDownList1.Text;
cmd.Parameters.Add("@Address", SqlDbType.VarChar, 50).Value = txtadrs.Text;
cmd.Parameters.Add("@Email", SqlDbType.VarChar, 50).Value = txtemail.Text;
cmd.Parameters.Add("@Contact_no", SqlDbType.VarChar, 50).Value = txtphone.Text;
1
Richa Garg 7 Сен 2016 в 04:05

Хороший способ начать исследование исключений - заключить код в блоки try/catch. Это позволит вам покопаться в исключении и, надеюсь, получить более содержательное описание ошибки. Отправка исключения как части вашего вопроса поможет сообществу найти причину.

Используйте блок try/catch следующим образом

try{
    // code goes here
}
catch (Exception e) // this block is only entered when an exception is thrown in the try block
{
    Console.WriteLine(e.ToString()); // print the exception description to the Console (if console application)
}

Как предлагается в комментариях, попробуйте выполнить хранимую процедуру с теми же параметрами и посмотрите, успешно ли она.

0
Zac Faragher 7 Сен 2016 в 03:46

Попробуйте вот так,

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;     /// this is optional if you declare @ID in your store procedure 
cmd.Parameters.Add("@Company_name", SqlDbType.VarChar).Value = txtname.Text;
cmd.Parameters.Add("@Register_no", SqlDbType.VarChar).Value= txtreg_no.Text;
cmd.Parameters.Add("@Type", SqlDbType.VarChar).Value = DropDownList1.Text;
cmd.Parameters.Add("@Address", SqlDbType.VarChar).Value = txtadrs.Text;
cmd.Parameters.Add("@Email", SqlDbType.VarChar).Value = txtemail.Text;
cmd.Parameters.Add("@Contact_no", SqlDbType.VarChar).Value = txtphone.Text;

И проверьте свой размер и имя переменной

0
Shakir Ahamed 7 Сен 2016 в 04:58