我尝试使用此代码更新我的数据库。出现消息,数据库已更新但数据库中的记录未更改。这是我正在使用的代码。请问我有什么错误吗?
private void titheEditBtn_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=EPRAISE-PC;Initial Catalog=Cmanager;Integrated Security=True");
SqlCommand sqlcmd = new SqlCommand("Select Count(MemberID) from Tithe where MemberID = @MemberID", con);
sqlcmd.Parameters.AddWithValue("@MemberID", titheMemID.Text);
con.Open();
int UserExist = (int)sqlcmd.ExecuteScalar();
if (UserExist > 0)
{
SqlCommand sqlcmmd = new SqlCommand("Update Tithe SET Amount = @titheAmount, Date = @titheDate where MemberID = @MemberID AND Date = @titheDate");
sqlcmmd.Parameters.AddWithValue("@MemberID", titheMemID.Text);
sqlcmmd.Parameters.AddWithValue("@titheAmount", titheAmount.Text);
sqlcmmd.Parameters.AddWithValue("@titheDate", titheDateTime.Text);
sqlcmd.ExecuteScalar();
titheEditMsg.Visible = true;
}
else
{
MessageBox.Show("No Such Record Exists");
}
con.Close();
///titheEditMsg.Visible = false;
}
答案 0 :(得分:1)
sqlcmd.ExecuteScalar(); //Excute scalar give only Single Cell it Is not meaningful to use to update
sqlcmd.ExecuteNonQuery();// Use to Inser/Update Statement...
答案 1 :(得分:0)
ExecuteScalar
返回一些数据,这是第一列的第一行。由于您的命令是UPDATE
,因此在这种情况下没有必要使用ExecuteScalar
,因为您的命令中没有返回任何数据。
您需要在第二个sqlcmmd
中使用ExecuteNonQuery
,因为您的命令是UPDATE
语句,此方法只执行您的查询。
还可以使用using
statement来处置您的SqlConnection
和SqlCommand
。
并且不要使用AddWithValue
方法。 可能会产生意外结果。请改用SqlParameterCollection.Add()
或它的重载。
阅读:Can we stop using AddWithValue()
already?
using(SqlConnection con = new SqlConnection(@"Data Source=EPRAISE-PC;Initial Catalog=Cmanager;Integrated Security=True"))
{
....
....
using(SqlCommand sqlcmmd = con.CreateCommand())
{
sqlcmmd.CommandText = "Update Tithe SET Amount = @titheAmount, Date = @titheDate where MemberID = @MemberID AND Date = @titheDate";
sqlcmmd.Parameters.Add("@MemberID").Value = titheMemID.Text;
sqlcmmd.Parameters.Add("@titheAmount").Value = titheAmount.Text;
sqlcmmd.Parameters.Add("@titheDate").Value = titheDateTime.Text;
con.Open();
sqlcmmd.ExecuteNonQuery();
}
}