2011-08-14 112 views
0

我發現一個解決這個問題的解決方法:將來自數據庫的數據加載到一組控件中,並將更新信息輸入到一組單獨的控件中。感謝您的評論;該應用程序正在工作。c#中的更新命令不更新數據庫

試圖更新數據庫行。我根據我在幾個論壇/網站上找到的內容編寫了以下代碼。他的代碼沒有更新數據庫。該數據庫將正確地更新,如果@editFirstName的值是文字,如

 UpdateCmd.Parameters["@editFirstName"] = "George"; 

我也試過

UpdateCmd.Parameters["@editFirstName"] = "'" + editFirstNameContent.Text + "'"; 

嘗試任何修復這個錯誤我發現了以下後

哪些沒有工作。

我也試圖把文本框的數據到一個變量,使用這個變量:

string firstNameValue = editFirstNameContent.Text; 
    UpdateCmd.Parameters["@editFirstName"] = firstNameValue; 

,沒有工作。

因此,UPDATE命令顯然是更新數據庫。但是,顯然Parameters.Value行不讀取TextBox中的數據,因此它不會使用更改的值進行更新。

protected void editCustomerButton_Click(object Sender, EventArgs e) 
{ 
    string connString = WebConfigurationManager.ConnectionStrings["proofreadThePlanetConnectionString"].ConnectionString; 
    using (SqlConnection connection = new SqlConnection(connString)) 
    { 
     connection.Open(); 
     string updateString = "UPDATE tblCustomerInfo SET [email protected], [email protected], [email protected], [email protected] WHERE customerID=" + Request.QueryString["EID"]; 
     SqlCommand UpdateCmd = new SqlCommand(updateString, connection); 
     UpdateCmd.Parameters.Add("@editCustomerID", SqlDbType.Int); 
     UpdateCmd.Parameters["@editCustomerID"].Value = editCustomerIDContent.Text; 
     UpdateCmd.Parameters.Add("@editFirstName", SqlDbType.VarChar, 25); 
     UpdateCmd.Parameters["@editFirstName"].Value = editFirstNameContent.Text; 
     UpdateCmd.Parameters.Add("@editLastName", SqlDbType.VarChar, 50); 
     UpdateCmd.Parameters["@editLastName"].Value = editLastNameContent.Text; 
     UpdateCmd.Parameters.Add("@editEmail", SqlDbType.VarChar, 75); 
     UpdateCmd.Parameters["@editEmail"].Value = editEmailContent.Text; 
     UpdateCmd.ExecuteNonQuery(); 
    } 
} 
+6

爲什麼你使用所有這些參數,然後在你的命令結尾仍然有concat。 –

+0

當您通過Parameters.Add添加更新的值時,您還應該通過Parameters.Add傳遞QueryString參數以避免SQL注入。你爲什麼更新customerID,這可能是你的PK? – devio

+0

你有錯誤嗎?嘗試放一個'try {...} catch(Exception ex)...'阻止它 - 有例外嗎?什麼樣的數據類型是'customerID'?如果它應該是一個字符串,那麼你需要在它周圍加單引號!或更好:**使用參數!** –

回答

2

我不知道MS SQL Server如何處理自動提交,但在情況下,自動提交模式未開啓,您將需要手動提交您的事務(UpdateCmd.Transaction.Commit)。

+1

否 - 因爲沒有顯式事務,所以UPDATE語句將在隱式事務中運行並在末尾提交自己... –

+0

因此,我應該做這個或沒有?如果是這樣,我該怎麼做? MSDN上的所有示例都是無用的,因爲我使用綁定到gridview的sqldatasource等。 –

+0

如果UPDATE語句隱式運行,爲什麼它不更新信息? –

0

我會檢查

Request.QueryString["EID"]

確實包含正確客戶ID值,因爲這可能會導致語句來運行,但沒有數據被更新,如果你是試圖更新一個不存在的行。

爲確保正確設置參數值,您可以嘗試以下格式;

command.Parameters.Add("@editCustomerID", SqlDbType.Int).Value = editCustomerIDContent.Text;

通過灰分,找出到底發生了什麼將是對數據庫運行事件探查器在執行命令的最佳方式建議(注:這可能會影響性能和應在測試/開發系統或者非工作時間內完成)