C# SQLHelper.DB不向存储过程传递参数
这是我上一个问题()的新问题。如果我将null作为参数传递,并将命令文本设置为无参数存储过程,那么它可以正常工作 SQLHelper.DB正在执行存储过程,但出现错误: 未处理的异常:System.Data.SqlClient.SqlException:过程或函数“sptest”需要未提供的参数“@param1” 可以通过创建新的.NET 4.7.2控制台应用程序并安装Nuget软件包SQLHelper.DB,然后使用下面的代码来重新创建 控制台应用程序代码:C# SQLHelper.DB不向存储过程传递参数,c#,sql-server,sqlhelper,C#,Sql Server,Sqlhelper,这是我上一个问题()的新问题。如果我将null作为参数传递,并将命令文本设置为无参数存储过程,那么它可以正常工作 SQLHelper.DB正在执行存储过程,但出现错误: 未处理的异常:System.Data.SqlClient.SqlException:过程或函数“sptest”需要未提供的参数“@param1” 可以通过创建新的.NET 4.7.2控制台应用程序并安装Nuget软件包SQLHelper.DB,然后使用下面的代码来重新创建 控制台应用程序代码: using Microsoft.E
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 TABLE [dbo].[tbltest]
(
[field1] [VARCHAR](10) NULL,
[field2] [VARCHAR](10) NULL
) ON [PRIMARY]
在执行正在使用的基础
SQLHelper.DB
的System.Data.SqlCommand
时,添加一个没有值的参数,或添加一个显式初始值为DBNull的参数。value
被忽略
与T-SQL相比,T-SQL每次声明标量变量时,标量变量的值都是NULL
,即使没有明确的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
,这不是本例中的问题,因为我在上面的代码中显式设置了参数值。。。但这很好知道!
command.Parameters.Add("@param1", SqlDbType.VarChar);
command.Parameters["@param1"].Value = (object)this.Status == null ? DBNull.Value : this.Status;