使用IDataReader调用带参数的存储过程

dan*_*tch 10 c# stored-procedures idatareader

我使用IDataReader来调用没有参数的存储过程.当参数存在时,我没有找到如何执行此操作的示例.IDataReader是否处理存储过程的参数?

请举个例子.

Fre*_*örk 8

它不是IDataReader处理参数,而是IDbCommand(使用CreateParameter方法).然后,您可以使用该ExecuteReader方法获取该命令的阅读器.

我把一个简单的例子放在一起:

private static void ExecuteCommand(IDbConnection conn)
{
    using (IDbCommand cmd = conn.CreateCommand())
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "ProcedureName";
        IDataParameter param = cmd.CreateParameter();
        param.ParameterName = "@parameterName";
        param.Value = "parameter value";
        cmd.Parameters.Add(param);
        using (IDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // get data from the reader
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Bil*_*zke 7

如果您使用的是企业库,则此样式适用于您:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

// ...

SqlDatabase db = new SqlDatabase("YourConnectionString");
DbCommand cmd = db.GetStoredProcCommand("YourProcName");
cmd.Parameters.Add(new SqlParameter("YourParamName", "param value"));

using (IDataReader dr = db.ExecuteReader(cmd))
{
    while (dr.Read())
    {
        // do something with the data
    }
}
Run Code Online (Sandbox Code Playgroud)