2013-07-30 93 views
0

對WPF不熟悉。我想編輯在文本框中顯示的數據庫行的值。此刻我收到一個錯誤:「ExecuteNonQuery:連接屬性尚未初始化」。當我刪除where子句時,所有的行都被更新,而不僅僅是所選的項目。編輯在文本框中顯示的數據庫行的值

private void btnEDIT_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     sc.Open(); 
     cmd = new SqlCommand("Update Rewards set Name = '" + this.txtName.Text + "', Cost= '" + this.txtCost.Text + "'where Name = '" + this.txtName.Text +"'"); 
     cmd.ExecuteNonQuery(); 
     MessageBox.Show("Update Successfull"); 
     sc.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

我注意到你正在更新名稱字段,並且你在具有相同值的where子句中傳遞相同的字段! – rach

回答

0

您沒有設置SqlCommandConnection財產。所以命令不知道在哪裏連接。從SqlCommand使用constructor overload,或將其分開這樣

cmd.Connection = sc; 
+0

sc.open();這是調用連接 – user2631662

+0

這會打開連接,是的。但從哪裏SqlCommand應該知道使用此連接? – LPL

+0

謝謝你的工作。 – user2631662

0
cmd = new SqlCommand("Update Rewards set Name = '" + this.txtName.Text + "', Cost= '" + this.txtCost.Text + "'where Name = '" + this.txtName.Text +"'",sc); // add connection here 

也應使用參數化查詢或存儲過程,以防止SQL注入攻擊。

SqlCommand cmd = new SqlCommand("Update Rewards set Name = @name, Cost= @cost where Name = @name ,sc); 
cmd.Parameters.AddWithValue("@name", Convert.ToString(this.txtName.Text)); and so on 
0

我希望這是你需要的:)複製粘貼這個。祝你好運,兄弟! :)如果你有問題,只是問,我會回答,如果我知道哈哈:)

private void btnEDIT_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     sc.Open(); 
     sql = "UPDATE REWARDS SET Name = '" + this.txtName.Text + "', Cost= '" + this.txtCost.Text + "'WHERE Name = '" + this.txtName.Text +"'"); 
     SqlCommand command = new SqlCommand(sql, con); 
     command.ExecuteNonQuery(); 
     MessageBox.Show("Update Successfull"); 
     sc.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

sql和con從哪裏來,它們不被識別? – user2631662

+0

哦,真抱歉! 使用System.Data添加這些: ; using System.Data.SqlClient; –

相關問題