Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL更新不工作,未引发任何错误_C#_Sql_Sql Server - Fatal编程技术网

C# SQL更新不工作,未引发任何错误

C# SQL更新不工作,未引发任何错误,c#,sql,sql-server,C#,Sql,Sql Server,我正在Visual studio windows窗体中编写一个程序,我的SQL UPDATEstatement无法工作,并且没有引发任何错误。这是我的密码: string strConnection = ConfigurationManager.ConnectionStrings ["Brownie.Properties.Settings.BrownieDB2ConnectionString"].ConnectionString; SqlConnectio

我正在Visual studio windows窗体中编写一个程序,我的SQL UPDATEstatement无法工作,并且没有引发任何错误。这是我的密码:

  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();
        }
我在VisualStudio提供的查询测试功能上测试了这段代码,该功能位于服务器资源管理器的“右键单击数据库>右键单击表名>新建查询”下,将值momentcardid放置在测试中,它能够成功地更新到数据库中

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


我真的不知道怎么了,希望有人能帮我弄清楚

这里可能发生两件事:

@a和cardd的值根本不匹配,因为它们与您期望的不完全一致;常见原因: 区分大小写 空白 固定宽度字符/nchar与动态宽度varchar/nvarchar 不可见字符两个值之一的unicode字符或转义字符 根本没有与该值匹配的数据! 它正在工作,但你找错地方了 这在使用基于文件的数据库而不是专用服务器时很常见-您需要确保经常查看executing文件夹/bin/debug等中的数据库文件,而不是源文件夹 要确定是哪个,可以添加select@@rowcount;在update语句之后,使用var rowsUpdated=cmd.ExecuteScalar。通过读取此值,可以查看更新了多少行。如果为零,则第一个项目符号适用;如果它不是零,则第二个项目符号适用


假设它是第一个项目符号,您需要非常仔细地查看momentcardid的值,包括任何空格和隐藏字符。momentcardid.Length是一个很好的起点,但momentcardid.ToCharray将是下一步,仔细查看每个字符

这里可能发生两件事:

@a和cardd的值根本不匹配,因为它们与您期望的不完全一致;常见原因: 区分大小写 空白 固定宽度字符/nchar与动态宽度varchar/nvarchar 不可见字符两个值之一的unicode字符或转义字符 根本没有与该值匹配的数据! 它正在工作,但你找错地方了 这在使用基于文件的数据库而不是专用服务器时很常见-您需要确保经常查看executing文件夹/bin/debug等中的数据库文件,而不是源文件夹 要确定是哪个,可以添加select@@rowcount;在update语句之后,使用var rowsUpdated=cmd.ExecuteScalar。通过读取此值,可以查看更新了多少行。如果为零,则第一个项目符号适用;如果它不是零,则第二个项目符号适用


假设它是第一个项目符号,您需要非常仔细地查看momentcardid的值,包括任何空格和隐藏字符。momentcardid.Length是一个很好的起点,但momentcardid.ToCharArray将是下一步,并仔细查看每个字符

尝试在WHERE之后删除,如下所示:WHERE DriverID IN SELECT DriverID FROM Driver WHERE CardID=@a@un-幸运的是,这不会改变任何事情;括号是正确平衡的,显示的语法是完全有效的,语义上等同于相同的,没有谓词周围的部分。我刚才试过了,它不起作用吗?您可以调试并检查吗?旁注:您应该对所有一次性对象使用using语句:SqlConnection、SqlCommand等。除此之外,您的代码对我来说似乎很好,我认为Marc的答案是正确的。请尝试在WHERE之后删除,如下所示:WHERE DriverID IN SELECT DriverID FROM Driver WHERE CardID=@a@un-幸运的是,这不会改变任何事情;括号是正确平衡的,显示的语法是完全有效的,语义上等同于相同的,没有谓词周围的部分。我刚才试过了,它不起作用吗?您可以调试并检查吗?旁注:您应该对所有一次性对象使用using语句:SqlConnection、SqlCommand等。另外,你的代码对我来说很好,我认为马克的答案是正确的。谢谢你的帮助!我想起来了:谢谢你的帮助!我已经弄明白了: