为什么 SqlParameter 名称/值构造函数将 0 视为 null?

2024-01-11

我在一段代码中观察到一个奇怪的问题,其中即席 SQL 查询没有产生预期的输出,即使其参数与数据源中的记录匹配。我决定在立即窗口中输入以下测试表达式:

new SqlParameter("Test", 0).Value

这给出了结果null,这让我摸不着头脑。看来SqlParameter构造函数将零视为空值。以下代码产生正确的结果:

SqlParameter testParam = new SqlParameter();
testParam.ParameterName = "Test";
testParam.Value = 0;
// subsequent inspection shows that the Value property is still 0

谁能解释这种行为?这是故意的吗?如果是这样的话,那可能就比较危险了……


如中所述文档 http://msdn.microsoft.com/en-us/library/0881fz2y.aspx对于该构造函数:

当您在 value 参数中指定对象时,将从该对象的 Microsoft .NET Framework 类型推断出 SqlDbType。

使用此重载时请小心sql参数 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx构造函数指定整数参数值。因为这个重载需要一个类型的值Object https://msdn.microsoft.com/en-us/library/system.object.aspx,您必须将积分值转换为Object https://msdn.microsoft.com/en-us/library/system.object.aspx当值为零时键入,如以下 C# 示例所示。

Parameter = new SqlParameter("@pname", (object)0);

如果您不执行此转换,编译器会假定您正在尝试调用sql参数 (字符串,SqlDb类型) http://msdn.microsoft.com/en-us/library/h8f14f0z.aspx构造函数重载。

您只是调用了与您在案例中想象的不同的构造函数。

这样做的原因是 C# 允许implicit从整数字面量转换0到枚举类型(它们只是下面的整型类型),这种隐式转换会导致(string, SqlDbType)与转换所需的装箱转换相比,构造函数更适合重载解析int to object为了(string, object)构造函数。

当您通过考试时,这永远不会成为问题int variable,即使该变量的值为0(因为它不是零文字),或具有该类型的任何其他表达式int。如果您明确地强制转换,也不会发生这种情况int to object如上所示,因为这样就只有一个匹配的重载。

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

为什么 SqlParameter 名称/值构造函数将 0 视为 null? 的相关文章

随机推荐

  • 如何使用 jQuery 测试元素是否驻留在 iFrame 中?

    如何使用 jQuery 测试元素是否驻留在 iFrame 中 如果驻留在 iFrame 中 如何选择该 iFrame 这样就可以了 var elementDocument your element prop ownerDocument va
  • 在 java ClassNotFoundException 中运行时加载类

    我在 java 运行时调用类时遇到问题 我基本上是在制作一个插件框架 它首先打开 plugin Plugins cfg 并将测试解析为映射 cfg 文件中的 EX 文本 1 我的插件 2 插件2 每个插件主类是 plugin 插件名称 ma
  • 纵向和横向之间切换

    我拍摄了两个视图 一个是纵向和横向 我想要切换旋转视图 我正在使用下面的代码 但它不起作用 我可能知道我哪里出了问题 因为我是iPhone开发的新手 我还没有实现任何东西在 ViewDidLoad 方法中 我也应该在那里实现任何东西吗 BO
  • 如何使用 Sprite Kit 减慢正在运行 SKAction followPath 的 SKSpriteNode 以获得慢动作效果?

    我基本上希望动作正在运行 然后在动作中间创建慢动作效果 然后将其从慢动作中取出 有人对如何做到这一点有任何好的反馈吗 我考虑过手动创建操作并使用更新方法 但我觉得这可能有点矫枉过正 我希望有一个更简单的解决方案 我的另一个想法是停止动作 然
  • 使用 CoreData 支持的 NSArrayController 在 NSTableView 中创建组行

    假设我在核心数据模型中存储了一堆 Article 对象 每篇文章都维护一个阅读进度属性 该属性表示用户已阅读了文章的多少 一旦用户完全阅读完该文章 该文章就会被标记为 已读 在此之前 它将被标记为 未读 现在我有一个绑定到 NSArrayC
  • 在 Android 活动上调用 finish() 并没有真正完成

    我正在打电话finish 但我的活动仍在继续 我有一个由主活动屏幕上的菜单调用的活动 在我的活动中onCreate 方法我有以下代码片段 Make sure there are some events in the list if theE
  • 我们可以在单元测试时检查 uitextfield 的验证吗?

    假设我们有一些验证ViewController 比如 vc1 对于UItextfield in shouldChangeCharactersInRange方法 因为用户只能输入数字 不能输入字母或其他特殊字符 我只是想知道在我们的XCTes
  • 将 Ruby 扩展方法添加到 Rails 3 的最佳实践?

    我有一个数组扩展方法 我想在我的Rails 3项目 它应该住在哪里 我有一个应用程序 类 我最初放置它 array extensions rb 并在我的 config application rb 中加载路径 config autoload
  • 从 Sinatra 访问标头

    我正在尝试访问 sinatra 中过滤器中的标头 我的请求包含标头 HTTP AUTH 但我无法访问它 我的过滤器是 before do halt 403 unless request HTTP AUTH test end 从我的机架测试来
  • Mongo 类不会在 Yii 控制台应用程序中自动加载

    我正在使用 Yii 和 mongodb YiiMongoDbSuite 扩展 并创建了一个控制台应用程序 但它不起作用并给出错误 include Mongo php 无法打开流 没有这样的文件或目录 在文件 var www yii fram
  • 如何从日志文件中制作 JMeter 输出图表?

    我需要生成与 JMeter 相同的图表 但来自我的应用程序 C VB 等 随时间变化的响应时间 https i stack imgur com qDJj9 png 响应时间分布 https i stack imgur com ujcy3 p
  • ASP.NET 解析来自 ajax 调用 javascript 日期的 DateTime 结果

    介绍 我有一个WebMethod在我的 ASP NET 页面上返回一个Person目的 其中一个字段是Birthday这是一个DateTime财产 网络方法 WebMethod public static Person GetPerson
  • 简单注入器:在基类中注入属性

    几个星期以来我一直在使用简易注射器 https simpleinjector org依赖注入容器 取得了巨大成功 我喜欢它的简单配置 但现在我有一个设计 我不知道如何配置 我有一个基类 其中派生出许多类型 并且我想将依赖项注入到基类的属性中
  • PowerShell将字符串拆分为二维数组

    TL DR 使用 PowerShell 我想首先用换行符 n 拆分文本字符串 将其存储到数组中 然后用逗号将这些数组条目拆分为二维数组 我在访问 或可能创建 第二维中的任何信息时遇到问题 INFO 我有以下字符串 存储为 services
  • 将另一个提交导入到我的存储库

    抱歉 新手问题 但是有没有办法将其他人提交 到他自己的存储库 导入到我的存储库 手动更改 900 多个文件将是一件困难的事情 您需要将对方的存储库添加为您的远程存储库 并获取其更改 git remote add matefork
  • Docker - Dockerfile 中使用 RUN 的 MySQL 命令(错误 2002)

    我正在使用 Docker 创建一个以 mysql 作为基础镜像的 dockerfile FROM mysql set root pass ENV MYSQL ROOT PASSWORD password update linux RUN a
  • 远程服务器返回错误:(407) 需要代理身份验证

    我将此代码与 NET 3 5 一起使用并收到错误 远程服务器返回错误 407 需要代理身份验证 using WebClient client new WebClient WebRequest DefaultWebProxy Credenti
  • 如何动态添加分页符到打印页面?

    打印页面上的内容很长 但是我们在打印时将文本的一些内容剪掉了 替代文本 http img694 imageshack us img694 6766 printpage jpg http img694 imageshack us img694
  • Magento - 根据环境加载local.xml

    我想要 3 个app etc local xml文件 将它们称为 local xml staging xml 和 live xml 我想根据我在 vhosts 或 htaccess 中设置的环境变量加载它们 这样我就可以拥有单独的数据库等
  • 为什么 SqlParameter 名称/值构造函数将 0 视为 null?

    我在一段代码中观察到一个奇怪的问题 其中即席 SQL 查询没有产生预期的输出 即使其参数与数据源中的记录匹配 我决定在立即窗口中输入以下测试表达式 new SqlParameter Test 0 Value 这给出了结果null 这让我摸不