使用Dapper调用SQL proc

时间:2017-09-05 08:24:43

标签: c# sql stored-procedures dapper

我编写了以下方法来调用我的proc并将返回的数据放入数据集中。

public class GetDataFromProc
{
    string constr;
    public DataSet CallProcToDataSet(string procName)
    {
        DataSet ds = new DataSet();

        constr = ConfigurationManager.ConnectionStrings["DataBase"].ConnectionString;

        using (SqlConnection con = new SqlConnection(constr))
        {

            using (SqlCommand cmd = new SqlCommand(procName))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = con;


                using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                {
                    sda.Fill(ds);
                }
            }
    }
    return ds;
}

我想要做的是使用Dapper NuGet包。通过文档检查,我可以看到示例proc调用行如下:

var user = cnn.Query<User>("spGetUser", new { Id = 1 }, commandType: CommandType.StoredProcedure).SingleOrDefault();

但是,我不确定将我的方法转换为上述示例的最佳方法是什么。有经验的Dapper会帮助我吗?

1 个答案:

答案 0 :(得分:1)

// Declare a model, with a property/field for every column
// that you care about from your Result
public class YourModel {

    public int Id {get;set;}
    // Whatever other columns your result has...
}



public class GetDataFromProc
{
    string constr;
    public IEnumerable<YourModel> CallProcToDataSet(string procName)
    {
        constr = ConfigurationManager.ConnectionStrings["DataBase"].ConnectionString;

        using (SqlConnection con = new SqlConnection(constr))
        {
            // If you expect only one row
            var result = cnn.Query<YourModel>(procName, new { anyParametersYouHave = theirValue }, commandType: CommandType.StoredProcedure).SingleOrDefault();

            // If you expect more than one row and want a collection
            var results= cnn.Query<YourModel>(procName, new { anyParametersYouHave = theirValue }, commandType: CommandType.StoredProcedure).ToList();

        }
    }
 }