2016-09-07 3 views
1
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"); 
} 

Хранимая процедура:'System.Data.SqlClient.SqlException' выброшены

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 

Ошибка:

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

Additional information: String or binary data would be truncated.

+2

Убедитесь, что параметры хранимых процедур матч размеры данных в таблице. Вы передаете строку, которая слишком длинна для поля. – PhillipXT

+0

Вы протестировали свою хранимую процедуру отдельно (используя, например, студию управления)? – mok

+0

Вы проверяете значение какого-либо одного текстового поля больше, чем значение размера базы данных или значение размера хранилища данных – SK2185

ответ

1

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

String or binary data would be truncated.

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

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; 
+2

В идеале мы должны иметь проверки в самом слое пользовательского интерфейса, прежде чем передавать значение поля в базу данных. Мы должны показывать сообщения об ошибках пользователю, если превышена максимально допустимая ширина поля. – RBT

0

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

Используйте 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

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

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; 

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

Смежные вопросы