SQLHelper.DB不将参数传递给存储过程

时间:2019-11-11 19:45:12

标签: c# sql-server sqlhelper

这是我上一个问题(C# Using Parameters in SqlHelper.DB)的新版本。如果我将null用作参数并将命令文本设置为无参数存储过程,则可以正常工作。

SQLHelper.DB正在执行存储过程,但出现错误:

  

未处理的异常:System.Data.SqlClient.SqlException:过程或函数'sptest'需要未提供的参数'@ param1'。

可以通过创建一个新的.NET 4.7.2控制台应用程序并安装Nuget包SQLHelper.DB,然后使用下面的代码来重新创建。

控制台应用程序代码:

Unable to instantiate codec 'OMX.qcom.video.decoder.avc' with err 0xfffffff4.

存储过程:

MediaStream

表格:

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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在执行基础DBNull.Value时,会忽略,而添加不带值的参数或添加具有显式初始值System.Data.SqlCommand的参数。 ,SQLHelper.DB正在使用。

与T-SQL进行对比,在T-SQL中,标量变量每次声明时的值为NULL ,即使没有显式的NULL值也是如此:{{ 1}}。

这种不一致也导致我的代码在这种模式下也意外崩溃:

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;