C# 如何使用存储过程?
我有许多存储过程。 为了使用它们,我创建了一个带有如下静态方法的静态类:C# 如何使用存储过程?,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我有许多存储过程。 为了使用它们,我创建了一个带有如下静态方法的静态类: public class DBHandler { private static Database db = DatabaseFactory.CreateDatabase("db"); public static DataTable GetItems(long filterId) { DbCommand command = db.GetStoredProcCommand("dbo.P
public class DBHandler
{
private static Database db = DatabaseFactory.CreateDatabase("db");
public static DataTable GetItems(long filterId)
{
DbCommand command = db.GetStoredProcCommand("dbo.P_GetItems");
db.AddInParameter(command, "@filter_id", DbType.Int64, filterId);
IDataReader reader = db.ExecuteReader(command);
DataTable dt= new DataTable();
dt.Load(reader, LoadOption.OverwriteChanges);
reader.Close();
return dt;
}
.
.
.
.
}
正如我写的,我有很多存储过程,重复这段代码很烦人。
有没有更好的方法调用存储过程?您可以使用命令行实用程序自动生成数据上下文代码,用于简单的LINQ查询。查看各种DAL。我们有一个自主开发的解决方案,可以帮助我们总结连接、命令和读卡器对象的IDisposable需求。还简化了参数传递和转换。但这不是火箭手术——我相信有很多选择。我喜欢这样的事情:
public static IEnumerable<IDataRecord> SqlRetrieve(string ConnectionString, string StoredProcName, Action<SqlCommand> addParameters)
{
using (SqlConnection cn = new SqlConnection(ConnectionString))
using (SqlCommand cmd = new SqlCommand(StoredProcName, cn))
{
cn.Open();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
if (addParameters != null)
{
addParameters(cmd);
}
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
yield return rdr;
}
}
}
foreach (var dr in
SqlRetrieve(cn, sp,
delegate (SqlCommand cmd) {
cmd.Parameters.Add("@paramname", System.Data.SqlDbType.Int).Value = someint;
}
)
) {
}
因此,您没有重复所有相同的代码,只是重复参数部分。在您的例子中,如果您总是返回数据表,而不需要在DataReader循环中获取大量代码,那么代码可能会变得更简单