2011-06-25 168 views
1
private void BtnSave_Click(object sender, EventArgs e) 
{ 
    using (SqlConnection sqlConn = new SqlConnection("Data Source=TANYA-PC;Initial Catalog=biore1;Integrated Security=True")) //or variable to it 
    { 
     string sqlQuery = @"INSERT INTO cottonpurchase VALUES(@slipno, @purchasedate, @farmercode, @farmername, @villagename, @basicprice, @weight, @totalamountbasic, @premium, @totalamountpremium, @totalamountpaid, @yeildestimates)"; 

     //NOTE: RENAME "MyTable" to your database table!!!! 

     using (SqlCommand cmd = new SqlCommand(sqlQuery, sqlConn)) 
     { 
     cmd.Parameters.Add("@slipno", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtSlipNo.Text)) ? int.Parse(TxtSlipNo.Text) : (object)DBNull.Value; 
     cmd.Parameters.Add("@purchasedate", SqlDbType.DateTime).Value = monthCalendar1.SelectionStart; //date of selection! 
     cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value = Convert.ToInt32(TxtFarmerCode.Text); 
     cmd.Parameters.Add("@farmername", SqlDbType.VarChar, 100).Value = TxtFarmerName.Text; 
     cmd.Parameters.Add("@villagename", SqlDbType.VarChar, 100).Value = TxtVillageName.Text; 
     cmd.Parameters.Add("@basicprice", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtBasicPrice.Text)) ? int.Parse(TxtBasicPrice.Text) : (object)DBNull.Value; 
     cmd.Parameters.Add("@weight", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtWeight.Text)) ? int.Parse(TxtWeight.Text) : (object)DBNull.Value; 
     cmd.Parameters.Add("@totalamountbasic", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtTotalAmountBasic.Text)) ? int.Parse(TxtTotalAmountBasic.Text) : (object)DBNull.Value; 
     cmd.Parameters.Add("@premium", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtPremium.Text)) ? int.Parse(TxtPremium.Text) : (object)DBNull.Value; 
     cmd.Parameters.Add("@totalamountpremium", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtTotalAmountPremium.Text)) ? int.Parse(TxtTotalAmountPremium.Text) : (object)DBNull.Value; 
     cmd.Parameters.Add("@totalamountpaid", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtTotalAmountPaid.Text)) ? int.Parse(TxtTotalAmountPaid.Text) : (object)DBNull.Value; 
     cmd.Parameters.Add("@yeildestimates", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtYeildEstimates.Text)) ? int.Parse(TxtYeildEstimates.Text) : (object)DBNull.Value; 

     sqlConn.Open(); 
     try 
     { 
     cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
     MessageBox.Show(ex.Message); 
     } 
    } 
    } 
} 

當我執行此我得到一個錯誤,指出:值插入數據庫

輸入字符串的不正確的 格式。

cmd.Parameters.Add(「@ farmercode」, SqlDbType.Int).Value = int.Parse(TxtFarmerCode.Text);

回答

0

TxtFarmerCode.Text不是有效int

好:int.Parse("123")

壞:int.Parse("Not an int")

2

錯誤說,它很清楚 - 顯然,你想轉換爲文本INT不是真的INT號碼...

也許你應該d做更多的東西是這樣的:

int farmerCode = -1; 

if(int.TryParse(TxtFarmerCode.Text.Trim(), out farmerCode) 
{ 
    cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value = farmerCode; 
} 
else 
{ 
    cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value = DBNull.Value; // or whatever makes sense 
} 

這是防禦式編程的基本原則 - 不只是承擔轉換將工作 - 它可能不是!測試它,使用int.TryParse,如果你輸入一個數字,你需要處理的是(通過一個NULL或其他機制 - 由你)

0

什麼樣的價值存在於

TxtFarmerCode.Text 

根據SQL參數,它需要是一個整數。聽起來像你需要做一些輸入驗證,以確保它是一個整數,然後將其傳遞到數據庫。

0

你的錯誤不匹配您的代碼:

代碼

cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value 
    = Convert.ToInt32(TxtFarmerCode.Text); 

錯誤

cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value 
    = int.Parse(TxtFarmerCode.Text); 

以外,它似乎很明顯,TxtFarmerCode.Text並沒有轉化爲其他一個有效的int。
確保您在將數據插入數據庫之前測試您的數值,這適用於所有範圍有限的變量。
顯然不是所有的整數對farmercode都有效,所以讓用戶有一個有效的farmercodes列表並讓他從列表中選擇一個。這樣,選擇不正確的farmercode是不可能的。

疑似錯誤插入的主鍵
您試圖插入一個新的記錄,如果slipno是你的主鍵,你不應該允許比null以外的值這裏,如果你嘗試插入現有的鑰匙插入你會得到一個錯誤,應該永遠不會發生。
最好讓數據庫分配主鍵,因爲這很簡單。數據庫
爲什麼你在你的表格farmercodefarmername

正常化?農民是否代表農民的身份?
如果存儲farmername也是重複的信息。
您應該將farmerid存儲在表格中。農民身份證然後指向表farmers的主鍵,其存儲關於農民的姓名和其他相關信息。

鏈接:
http://en.wikipedia.org/wiki/Database_normalization
http://databases.about.com/od/specificproducts/a/normalization.htm