'System.Data.SqlClient.SqlException' thrown
本文关键字:thrown SqlException System Data SqlClient | 更新日期: 2023-09-27 18:06:09
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"的异常。在System.Data.dll中发生了SqlException',但未在用户代码中处理
附加信息:字符串或二进制数据将被截断。
下面的错误表明您的一个或多个数据字段不适合DB字段。例如,您的地址可能是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;
开始调查异常的一个好方法是将代码包装在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)
}
按照注释中的建议,尝试使用相同的参数执行存储过程,看看是否成功。
试一下,
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;
检查变量大小和名称