c# - SQLHelper.DB 未将参数传递给存储过程
问题描述
这是我上一个问题(C# Using Parameters in SqlHelper.DB)的新问题。如果我将 null 作为参数传递并将命令文本设置为无参数存储过程,则它可以正常工作。
SQLHelper.DB 正在执行存储过程,但出现错误:
未处理的异常:System.Data.SqlClient.SqlException:过程或函数“sptest”需要参数“@param1”,但未提供。
这可以通过创建一个新的 .NET 4.7.2 控制台应用程序并安装 Nuget 包 SQLHelper.DB 然后使用下面的代码来重新创建。
控制台应用程序代码:
using Microsoft.Extensions.Configuration;
using SQLHelperDB;
using SQLHelperDB.HelperClasses;
using SQLHelperDB.HelperClasses.Interfaces;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
TestSql();
}
static void TestSql()
{
IParameter[] p = new IParameter[]
{
new Parameter<string>("@param1", "test1"),
new Parameter<string>("@param2", "test2")
};
IConfigurationRoot Configuration = new ConfigurationBuilder()
.AddInMemoryCollection()
.Build();
SQLHelper helper = new SQLHelper(Configuration, SqlClientFactory.Instance, "your connection string here");
helper.CreateBatch()
.AddQuery("dbo.sptest", CommandType.StoredProcedure, p)
.Execute();
}
}
}
存储过程:
CREATE PROCEDURE [dbo].[sptest]
(@param1 VARCHAR(10),
@param2 VARCHAR(10))
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.tbltest (field1, field2)
VALUES (@param1, @param2);
END;
桌子:
CREATE TABLE [dbo].[tbltest]
(
[field1] [VARCHAR](10) NULL,
[field2] [VARCHAR](10) NULL
) ON [PRIMARY]
解决方案
添加一个没有值的参数,或者添加一个具有显式初始值的参数在执行底层时DBNull.Value
会被忽略System.Data.SqlCommand
,它SQLHelper.DB
正在使用。
NULL
将此与 T-SQL 进行对比,在 T-SQL 中,标量变量在每次声明时都存在一个值,即使没有显式NULL
值:DECLARE @param1 VARCHAR(10)
.
这种不一致也导致我的代码在这种模式下意外崩溃:
command.Parameters.AddWithValue("@param1", (object)this.Status == null ? DBNull.Value : this.Status);
解决方案:
command.Parameters.Add("@param1", SqlDbType.VarChar);
command.Parameters["@param1"].Value = (object)this.Status == null ? DBNull.Value : this.Status;
大概这类似于SQLHelper.DB
推荐阅读
- json - Camel DataFormat Jackson 使用蓝图 XML DSL 引发上下文异常
- jquery - 每隔一周将 JQuery datepicker 限制为 1(每两周一次)
- java - 生成带有 minifyEnabled 设置为 true 的签名 APK 后,firebase UI 输出空白
- python - 使用 Keras 进行图像分类:“预期activation_1 具有形状 (2,) 但得到的数组具有 (1,)”
- mockito - PowerMockito 链接对于 Spied 类不能可靠地工作
- python - 在python中使用整数元组作为键不起作用
- xcode - 您可以/应该在 Xcode 的 xcassets 中存储多少图像?
- unity3d - 我受到伤害但我看不到动画
- python - ValueError: Traceback(最近一次调用最后一次)
在 () - c++ - 如何动态跟踪OpenGL中的纹理单元?