'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',但未在用户代码中处理

附加信息:字符串或二进制数据将被截断。

'System.Data.SqlClient.SqlException' thrown

下面的错误表明您的一个或多个数据字段不适合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;

检查变量大小和名称