2017-09-05 65 views
2

我已经编写了以下方法来调用我的proc并将返回的数据放入数据集中。用Dapper调用SQL处理程序

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

     } 
    } 
}