抛出'System.Data.SqlClient.SqlException'

时间:2016-09-07 03:25:03

标签: c# sql-server

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.dll中出现'System.Data.SqlClient.SqlException'类型的异常,但未在用户代码中处理

     

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

3 个答案:

答案 0 :(得分:1)

以下错误表示您的一个或多个数据字段无法放入数据库字段。例如,您的地址可能是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 :(得分:0)

开始调查异常的一个好方法是将代码包装在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)
}

根据评论中的建议,尝试使用相同的参数执行存储过程,看看它是否成功。

答案 2 :(得分: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;

并检查您的变量大小和名称