【发布时间】:2018-08-23 03:04:33
【问题描述】:
我从 C# 执行一个存储过程,如下所示:
medianOfProjects = db.ExeSQLParamByDateTime("usp_TaskStatistics_Median_Calculation", parameters, "@TaskTypeTableType", 1, startDate, endDate
unitNumberFrom, unitNumberTo, unitNumberBldgsSegsFrom, unitNumberBldgsSegsTo, unitNumberSqrFrom, unitNumberSqrTo, unitNumberWoodStoriesFrom,
unitNumberWoodStoriesTo, currentRegionKey);
ExeSQLParamByDateTime 方法过大:
public DataTable ExeSQLParamByDateTime(string sprocName, DataTable paramArray, string tableTypeName, int LegacyKey, DateTime startingDate, DateTime endingDate,
int unitNumberFrom, int unitNumberTo, int BldgSegsFrom, int BldgSegsFromTo, int SquareFootageFrom, int SquareFootageTo, int WoodStoriesFrom,
int WoodStoriesTo, int StatusKey)
{
SqlCommand cmd = new SqlCommand(sprocName, this.dbconn);
var startDate = startingDate.Date;
var endDate = endingDate.Date;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter(tableTypeName, SqlDbType.Structured));
cmd.Parameters[tableTypeName].Value = paramArray;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@LegacyKey", SqlDbType.Int));
cmd.Parameters["@LegacyKey"].Value = LegacyKey;
cmd.Parameters.Add(new SqlParameter("@StartingDate", SqlDbType.DateTime));
cmd.Parameters["@StartingDate"].Value = startDate;
cmd.Parameters.Add(new SqlParameter("@EndingDate", SqlDbType.DateTime));
cmd.Parameters["@EndingDate"].Value = endDate;
cmd.Parameters.Add(new SqlParameter("@UnitNumberFrom", SqlDbType.Int));
cmd.Parameters["@UnitNumberFrom"].Value = unitNumberFrom;
cmd.Parameters.Add(new SqlParameter("@UnitNumberTo", SqlDbType.Int));
cmd.Parameters["@UnitNumberTo"].Value = unitNumberTo;
//etc
//etc
}
有没有办法优化这个?我只是检查好的做法,如您所见,我发送参数 DataTable 以执行 sql TableType 并发送参数,但我没有找到类似的东西。帮助表示赞赏。问候
【问题讨论】:
-
优化是什么意思。具体
-
我认为他只是意味着减少代码量。每个参数两行(包括空格在内 3 行)+ 很多参数会变得乏味。
-
如果您使用像 Dapper 或 PetaPoco 这样的微型 ORM,它将减少相当多的此类样板。
标签: c# sql-server stored-procedures sqlcommand