SQL Server存储过程抱怨缺少参数,但是正在设置

r3plica

我有这种方法:

public class StoredProcedureProvider : IStoredProcedureProvider
{
    private readonly string _connectionString;

    public StoredProcedureProvider(IDataConfig config) => _connectionString = config.ConnectionString;

    public T ExecuteScalar<T>(string procedureName, IList<SqlParameter> parameters = null)
    {
        return Execute(procedureName, parameters, (connection, command) =>
        {
            connection.Open();
            var result = command.ExecuteScalar();

            return (T) Convert.ChangeType(result, typeof(T));
        });
    }

    public DataSet GetDataSet(string procedureName, IList<SqlParameter> parameters = null)
    {
        return Execute(procedureName, parameters, (connection, command) =>
        {
            var dataAdapter = new SqlDataAdapter();
            var dataSet = new DataSet();

            dataAdapter.SelectCommand = command;
            dataAdapter.Fill(dataSet);
            return dataSet;
        });
    }

    public DataRow GetDataRow(string procedureName, IList<SqlParameter> parameters = null)
    {
        var dataSet = GetDataSet(procedureName, parameters);

        var tables = dataSet.Tables.Cast<DataTable>().ToList();

        if (!tables.Any()) 
             throw new Exception("The DataSet contains not tables");

        var dataRows = dataSet.Tables[0].Rows.Cast<DataRow>().ToList();

        if (!dataRows.Any()) 
             throw new Exception("The DataTable contains no rows");

        var dataRow = dataRows.First();
        return dataRow;
    }

    private static T Execute<T>(string procedureName, IList<SqlParameter> parameters, Func<SqlConnection, SqlCommand, T> returnMethod)
    {
        using (var connection = new SqlConnection(_connectionString))
        {
            using (var command = new SqlCommand(procedureName, connection))
            {
                command.CommandType = CommandType.StoredProcedure;

                if (parameters == null || !parameters.Any()) 
                    return returnMethod(connection, command);

                foreach (var parameter in parameters)
                    command.Parameters.Add(parameter);

                return returnMethod(connection, command);
            }
        }
    }
}

当我用非字符串参数调用任何东西时,出现错误:

过程或函数“ generalLogonFromSessionID”需要未提供的参数“ @sessionID”。

我用来测试的代码是:

var dataRow = _storedProcedureProvider.GetDataRow("generalLogonFromSessionID", new List<SqlParameter>
{
    new SqlParameter("@sessionID", SqlDbType.UniqueIdentifier, oTokenData.TokenId.Length, oTokenData.TokenId),
    new SqlParameter("@ipAddress", ipAddress)
});

但是,如果我使用仅接受字符串参数的存储过程,则可以正常工作。

例如:

var dataRow = _storedProcedureProvider.GetDataRow("generalLogon", new List<SqlParameter>
{
    new SqlParameter("@loginName", oTokenData.Update.User.EmailAddress),
    new SqlParameter("@password", bookingType == BookingType.Commercial ? lastName : "password"),
    new SqlParameter("@ipAddress", ipAddress)
});

有人知道为什么吗?

恩科西

当前示例使用了错误的构造函数重载。

public SqlParameter(string parameterName, SqlDbType dbType, int size, string sourceColumn);

更新以使用以下内容

new SqlParameter("@sessionID", SqlDbType.UniqueIdentifier) {
    Value = oTokenData.TokenId
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server存储过程参数

来自分类Dev

sql server存储过程IN参数

来自分类Dev

SQL Server存储过程参数

来自分类Dev

SQL Server存储过程Nullable参数

来自分类Dev

SQL Server存储过程传递日期参数

来自分类Dev

SQL Server存储过程追加参数格式

来自分类Dev

SQL Server 中存储过程的可选参数

来自分类Dev

SQL Server存储过程正在插入两条记录

来自分类Dev

即使提供了参数,SQL Server存储过程仍需要参数

来自分类Dev

sql server存储过程插入值作为输出参数

来自分类Dev

SQL Server:使用动态查询时存储过程参数被截断

来自分类Dev

SQL Server存储过程中的多个表类型参数

来自分类Dev

如何向/从SQL Server存储过程发送和接收参数

来自分类Dev

SQL Server中具有可选DateTime参数的存储过程

来自分类Dev

在SQL Server存储过程中创建表类型参数

来自分类Dev

表名称为输入参数的动态SQL Server存储过程

来自分类Dev

将参数传递给SQL Server存储过程

来自分类Dev

SQL Server中存储过程中的可选参数

来自分类Dev

使用C#使用参数调用SQL Server存储过程

来自分类Dev

SQL Server存储过程oDate作为无法识别的参数

来自分类Dev

在SQL Server中使用空数据参数调用存储过程

来自分类Dev

ASP参数以调用SQL Server中的存储过程

来自分类Dev

sql server存储过程中的xml参数

来自分类Dev

SQL Server存储过程基于输入参数值

来自分类Dev

SQL Server 2012插入N个参数的存储过程

来自分类Dev

将参数传递给SQL Server存储过程

来自分类Dev

SQL Server存储过程-基于多个参数删除行

来自分类Dev

使用参数SQL Server 2005执行存储过程

来自分类Dev

在SQL Server中使用参数创建和执行存储过程

Related 相关文章

热门标签

归档