数据库更新问题

时间:2014-12-03 11:41:40

标签: c# sql database

我尝试使用此代码更新我的数据库。出现消息,数据库已更新但数据库中的记录未更改。这是我正在使用的代码。请问我有什么错误吗?

    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;
    }

2 个答案:

答案 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来处置您的SqlConnectionSqlCommand

并且不要使用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();
    }
}