SQL UPDATE不起作用,不会抛出任何错误

时间:2017-07-07 09:34:45

标签: c# sql sql-server

我在Visual studio窗体中编写程序,我的SQL UPDATE语句不起作用,并且没有errors抛出。这是我的代码:

  string strConnection = ConfigurationManager.ConnectionStrings
         ["Brownie.Properties.Settings.BrownieDB2ConnectionString"].ConnectionString;

        SqlConnection sqlconnect = new SqlConnection(strConnection);

        string strSQL = "UPDATE Cargo SET Jobdone = 'Yes' WHERE (DriverID IN (SELECT DriverID FROM Driver WHERE (CardID = @a)))";

        SqlCommand cmd = new SqlCommand(strSQL, sqlconnect);

        cmd.Parameters.AddWithValue("@a", momentcardid);

        try
        {
            //step 3: open connection
            sqlconnect.Open();
            //step 4: execute command
            int result = cmd.ExecuteNonQuery();

            if (result > 0)
                MessageBox.Show("Job has been successfully updated");
            else
                MessageBox.Show("Job update is unsuccessful");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            //step 5: close connection
            sqlconnect.Close();
        }

我在Visual studio Server Explorer (Right click database > Right click table name > New Query)下的momentcardid提供的查询测试功能中测试了此代码,将值Job has been updated successfully放置进行测试,并且能够成功更新到数据库中。

但是,当我尝试在winform上运行代码时,它不会更新到数据库中。也没有抛出错误。它甚至会显示消息框{{1}}

我真的不确定出了什么问题,我希望有人可以帮我搞清楚!

1 个答案:

答案 0 :(得分:4)

这里有两件事可能发生:

  1. @aCardId 的值不匹配,因为不是您所期望的;常见原因:
    • 区分大小写
    • 空白
    • 固定宽度(char / nchar)与动态宽度(varchar / nvarchar
    • 两个值之一
    • 中的不可见字符(unicode字符或转义字符)
    • 根本没有匹配该值的数据!
  2. 正在工作,但你看错了地方
    • 这在使用基于文件的数据库而不是专用服务器时很常见 - 您需要确保查看执行文件夹中的数据库文件(通常是/ bin / debug等)而不是 source 文件夹
  3. 要确定哪个,您可以在select @@rowcount;语句后添加update并使用var rowsUpdated = cmd.ExecuteScalar。通过读取此值,您可以查看更新了多少行。如果它为零,那么第一颗子弹适用;如果它不为零,那么第二个子弹适用。

    假设它是第一颗子弹,您需要仔细查看momentcardid的值,包括任何空格和隐藏字符。 momentcardid.Length将是一个很好的起点,但momentcardid.ToCharArray()将是下一步(并仔细查看每个角色)