当前位置: 首页 > 面试题库 >

将空参数发送到Sql Server

弘焕
2023-03-14
问题内容

我有一个SqlCommand用于更新数据库表的对象,但是它不能正确解释我的空值。

这是SQL:

UPDATE dbo.tbl 
SET param1 = @param1, 
param2 = @param2,
param3 = @param3,
param4 = @param4, 
param5 = @param5, 
param6 = @param6, 
param7 = @param7, 
param8 = @param8, 
param9 = @param9, 
param10 = @param10 
WHERE param11 = @param11

我已经尝试过像这样可以为空的null合并参数,但是我没有取得任何成功。除非另有说明,否则所有参数均为字符串:

command.Parameters.AddWithValue("@param1", param1 ?? DBNull.Value);
command.Parameters.AddWithValue("@param2", param2 ?? DBNull.Value);
command.Parameters.AddWithValue("@param3", param3 ?? DBNull.Value);
command.Parameters.AddWithValue("@param4", param4 ?? DBNull.Value);
command.Parameters.AddWithValue("@param5", param5 ?? DBNull.Value);
// param6 is nullable type DateTime?
command.Parameters.AddWithValue("@param6", param6 ?? DBNull.Value); 
command.Parameters.AddWithValue("@param7", param7 ?? DBNull.Value);
// param8 is nullable type DateTime?
command.Parameters.AddWithValue("@param8", param8 ?? DBNull.Value); 
command.Parameters.AddWithValue("@param9", param9 ?? DBNull.Value);
// param10 nullable type float?
command.Parameters.AddWithValue("@param10", param10 ?? DBNull.Value); 
command.Parameters.AddWithValue("@param11", param11 ?? DBNull.Value);

我得到这样的异常:

The parameterized query '(@param1 nvarchar(4000),@param2 nvarchar(4000),@param3 nvarc' expects the parameter '@param4', which was not supplied.

在将每个参数添加到SqlCommand对象以设置DbNull.Value(如果参数值为null)之后,我还尝试遍历每个参数,如下所示:

foreach (SqlParameter parameter in command.Parameters)
{
    if (parameter.Value == null)
    {
        parameter.Value = DBNull.Value;
    }
}

但是,这种方法导致异常:

String or binary data would be truncated.
The statement has been terminated.

将空参数传递给a的最佳做法是SqlCommand什么?如果数据库为空值,则我不想简单地传递默认值(如果它们为null)。


问题答案:

试试这个 :

command.Parameters.AddWithValue("@param1", param1 ?? Convert.DBNull);


 类似资料:
  • 在我的android应用程序中,我发送了一个截击POST请求,但它不起作用。相反,它发送的是空参数。 如果我输入url(https://blogurl.com/wp-json/wp/v2/comments?post=20081 Postman为JAVA OKHttp生成的代码如下: 这是我用来发送POST请求的代码: 就像我之前说的,请求是真的,但是参数没有随请求一起发送。 应用他的解决方案后,我

  • 问题内容: 我在这个jar中制作了一个名为 GetOfferSoftware的* jar 文件,我有一个名为 Offer的 Main类, 并且该Offer类包含以下功能 *** 现在我想从 另一个 与GetOfferSoftware jar不相关的 Java程序 调用此函数,所以我的问题是如何从另一个Java类访问参数并将参数发送到getOffer()函数。伙计们先谢谢 问题答案: 为了使用另一个

  • 我正在使用Hibernate。我有一把刀: 在哪里 并用@Entity注释。 它包含它所表示的表的所有列名。 然后,我的服务类自动连接了上述dao对象。我可以看到DmRequestDomain的值正确地打印在日志文件中。 但是当我通过这条道调用add时,我在我的服务器日志中看到所有的空值都被发送了。 可能的原因是什么。 我在服务器日志中看到的查询是

  • 问题内容: 我当前的部分看起来像这样: …这意味着我可以运行来启动服务器。到现在为止还挺好。 但是,我希望能够运行类似的东西并将参数传递给(例如=> )。这可能吗? 问题答案: 编辑: 可以将args传递给npm2.0.0 语法如下: 注意必要的。需要将传递给命令本身的参数和传递给脚本的参数分开。 所以如果你有 那么以下命令将是等效的: => => 为了读取命名参数,最好使用yargs或[mini

  • 问题内容: 现在,我的问题是尝试在编辑该行时发送该行的ID()。 例如,我有一个带有列userid(),username(),firstname(),lastname()的网格。在编辑行时,网格仅发送参数用户名,名字和姓氏。在服务器端,我需要用户ID知道我已将哪些新值应用于这些用户。 editUrl看起来像: 谢谢 这是完整的代码: 问题答案: 您可以使用 (ID)列的定义中。该参数当前不是真正需

  • 我是百里香菜鸟。我试图创建一个简单的crud应用程序。我试图在删除按钮上删除客户类的对象。我如何使用百里香叶为调用deleteUser的方法设置参数(例如- id)。这是我的控制器。 以下是我的看法。