2016-09-07 28 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.

爲了解決這個問題,首先檢查如果數據要插入符合規定到您DB定義的大小。爲了趕上這更容易,定義參數的存儲過程如下:

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

理想情況下,在將字段值傳遞給數據庫之前,我們應該在UI層本身進行檢查。如果超出了允許的最大字段寬度,我們應該向用戶顯示錯誤消息。 – RBT

0

的一個好辦法,開始調查例外是包裝你的代碼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) 
} 

正如意見建議使用try/catch塊,請嘗試使用相同的參數執行存儲過程,看看它是否成功。

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; 

,並檢查您的變量大小和名稱

相關問題