AddWithValue 参数为 NULL 时出现异常

2023-11-24

我有以下代码用于指定 SQL 查询的参数。我使用时遇到以下异常Code 1;但当我使用时效果很好Code 2. In Code 2我们检查是否为空,因此if..else block.

例外:

参数化查询“(@application_ex_id nvarchar(4000))SELECT E.application_ex_id A”需要参数“@application_ex_id”,但未提供该参数。

Code 1:

command.Parameters.AddWithValue("@application_ex_id", logSearch.LogID);

Code 2:

if (logSearch.LogID != null)
{
         command.Parameters.AddWithValue("@application_ex_id", logSearch.LogID);
}
else
{
        command.Parameters.AddWithValue("@application_ex_id", DBNull.Value );
}

QUESTION

  1. 您能否解释一下为什么无法从代码1中的logSearch.LogID值中获取NULL(但能够接受DBNull)?

  2. 有更好的代码来处理这个问题吗?

参考:

  1. 将 null 分配给 SqlParameter
  2. 返回的数据类型根据表中的数据而变化
  3. 从数据库 Smallint 到 C# nullable int 的转换错误
  4. DBNull 有什么意义?

CODE

    public Collection<Log> GetLogs(LogSearch logSearch)
    {
        Collection<Log> logs = new Collection<Log>();

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            string commandText = @"SELECT  *
                FROM Application_Ex E 
                WHERE  (E.application_ex_id = @application_ex_id OR @application_ex_id IS NULL)";

            using (SqlCommand command = new SqlCommand(commandText, connection))
            {
                command.CommandType = System.Data.CommandType.Text;

                //Parameter value setting
                //command.Parameters.AddWithValue("@application_ex_id", logSearch.LogID);
                if (logSearch.LogID != null)
                {
                    command.Parameters.AddWithValue("@application_ex_id", logSearch.LogID);
                }
                else
                {
                    command.Parameters.AddWithValue("@application_ex_id", DBNull.Value );
                }

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if (reader.HasRows)
                    {
                        Collection<Object> entityList = new Collection<Object>();
                        entityList.Add(new Log());

                        ArrayList records = EntityDataMappingHelper.SelectRecords(entityList, reader);

                        for (int i = 0; i < records.Count; i++)
                        {
                            Log log = new Log();
                            Dictionary<string, object> currentRecord = (Dictionary<string, object>)records[i];
                            EntityDataMappingHelper.FillEntityFromRecord(log, currentRecord);
                            logs.Add(log);
                        }
                    }

                    //reader.Close();
                }
            }
        }

        return logs;
    }

很烦人,不是吗。

您可以使用:

command.Parameters.AddWithValue("@application_ex_id",
       ((object)logSearch.LogID) ?? DBNull.Value);

或者,使用像“dapper”这样的工具,它会为你解决所有这些麻烦。

例如:

var data = conn.Query<SomeType>(commandText,
      new { application_ex_id = logSearch.LogID }).ToList();

I'm tempted向 dapper 添加一个方法来获取IDataReader...还不太确定这是否是一个好主意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AddWithValue 参数为 NULL 时出现异常 的相关文章

随机推荐

  • 对 CollectionViewSource 感到困惑(SelectedItem 无法在组合中工作)

    我有一堆组合 它们都共享相同的可用选项 这些选择在我的 ViewModel 公开的集合中提供 一切都很好 花花公子 我现在想要对这些选择进行排序 所以我决定公开一个ICollectionView来自我的 ViewModel 而不是我平常的R
  • 将 plupload 与 MVC3 结合使用

    因此 我在 MVC3 中使用 flash 运行时实现了 plupload 它工作完美 因为它使用更正操作上传并运行全部内容 但是 我真的很希望能够控制响应 并在 plupload 中处理它 但我似乎无法得到任何响应 我尝试过覆盖 fileU
  • ambari hadoop 安装期间权限被拒绝(publickey、gssapi-keyex、gssapi-with-mic、密码)

    我正在尝试使用 ambari 部署 hadoop 集群 但是当我选择具有 FQDN 的主机名并继续配置时 我收到 ssh 的权限被拒绝错误 脚步 1 使用 ssh keygen 作为 root 生成 rsa 密钥 更改了 ssh 700 和
  • 我什么时候会使用 AppDomain?

    我对反射相当陌生 我想知道我会使用 第二个 AppDomain 做什么 在商业应用中会有什么实际应用 有很多用途 辅助 AppDomain 可以提供一定程度的隔离 类似于操作系统提供的进程隔离 我使用它的一个实际用途是动态加载 插件 DLL
  • 如何在android中将url加载到webview时显示进度?

    我正在将 url 加载到 webview 中 WebView webview WebView findViewById R id webview webview loadUrl url 加载网址需要一些时间 在此期间显示空白屏幕 我想在加载
  • 递归查询挑战 - 简单的父/子示例

    注意 在 postgresql 上的 RhodiumToad 的帮助下 我找到了一个解决方案 我将其作为答案发布 如果有人可以对此进行改进 请加入 我还没能适应之前的递归查询解决方案到以下有向无环图 其中包括多个 根 无祖先 节点 我正在尝
  • System.Diagnostics.Process.Start 针对不同域的进程

    我们有一个场景 我们需要用户能够启动 SQLServer 并使用与当前登录的域不同的域进行身份验证 因此 为了澄清其设置方式 用户到达办公室并登录公司域 为简单起见 我们将其称为 LOCALDOMAIN 他们希望连接到不同域上的远程数据库
  • TWTweetComposeViewController 中的错误?

    我正在使用 TWTweetComposeViewController 如果可用 从我的 iOS 应用程序内部发送推文 我用样板文本预先填充视图控制器 然后让用户自行修改和发送 它在大多数情况下都非常有效 蒸馏下来 它看起来像这样 与body
  • 测试|无法在resetFakeAsyncZone处读取未定义的属性“assertPresent”

    我的 karma v1 4 有问题 测试框架 我所有的单元测试现在都因错误而失败Cannot read property assertPresent of undefined at resetFakeAsyncZone 我已经搜索过解决方案
  • 让 eclipse 调试我的 android 项目

    我正在使用 Eclipse 编写 Android 应用程序 当我单击左侧树视图中的项目 然后单击 调试 时 IDE 会构建一个 APK 并按预期安装在模拟器 设备中 但是 如果我正在编辑文件并且忘记在尝试调试之前首先单击该项目 那么 IDE
  • 如何在网格视图的行命令中找到该控件?

    我怎么能够在 row 命令中找到控件网格视图 实际上 GridViewCommandEventArgs 中没有 Row 因此您需要从命令源命名容器中获取行 GridViewRow row GridViewRow Control e Comm
  • .NET 中的 Java 小程序相当于什么?

    NET 中的 Java 小程序相当于什么 是银光吗 Java applet 还在广泛使用吗 1997 年 当 Java 1 0 发布时 Java applet 是 新的热门事物 几年后 它们变得越来越不受欢迎 主要是因为在计算机上安装Jav
  • 如何实现像Gallery一样的Horizo​​ntalScrollView?

    I want to implement Horizontal ScrollView with some features of Gallery 在图库中 滚动条在一定距离处成对排列 即如果屏幕上显示三个图像 单击最后一个图像将排列在中心 我
  • 通过自动解锁从类返回锁定的资源

    我想要一个返回指向资源的指针的类成员函数 资源应自动锁定和解锁 我考虑创建一个不可复制的对象来处理锁定 您认为以下是一个好的解决方案吗 它是线程安全的吗 STL 中是否已有适用于此用例的工具 template
  • Scala String* 类型(在函数 args 中)

    我有以下方法 def m a String 我想知道此语法中星号 符号的用途是什么 我显然是 Scala 的新手 我用谷歌搜索 但可能搜索错误的东西 任何帮助表示赞赏 Cheers 它被称为 var args 变量参数 def concat
  • 我可以在批处理脚本中的一个“查找”命令中搜索多个字符串吗?

    我有一个 Windows 批处理脚本 它将在文件中查找字符串 find i WD6 Inputpath file txt if errorlevel 0 GOTO somestuff 目前 这就是我的代码的样子 我遇到了一个新字符串 我想在
  • 如何使用 C#6“使用静态”功能?

    我正在看其中的几个新功能在C 6 具体来说 使用静态 using static is a new kind of using clause that lets you import static members of types direc
  • 关于 NaN 运算的问题

    我的 SSE FPU 生成以下 NaN 当我执行任何基本的对偶运算 如 ADDSD SUBSD MULSD 或 DIVSD 并且两个操作数之一为 NaN 时 结果具有 NaN 操作数的符号 并且结果尾数的低 51 位将加载NaN 操作数尾数
  • Rails:金钱宝石将所有金额转换为零

    我正在尝试使用金钱宝石在我的应用程序中处理货币 但我遇到了一个奇怪的错误 这就是我的 记录 模型中的内容 composed of amount class name gt Money mapping gt w cents cents w c
  • AddWithValue 参数为 NULL 时出现异常

    我有以下代码用于指定 SQL 查询的参数 我使用时遇到以下异常Code 1 但当我使用时效果很好Code 2 In Code 2我们检查是否为空 因此if else block 例外 参数化查询 application ex id nvar