如何简化这个冗长的 ADO.NET 数据库代码
How do I simplify this verbose ADO.NET Database Code
小问题 - 我对 C#
没有经验。
我有以下代码来调用多参数 SQL-Server 存储过程。
它可以工作,而且很好而且明确,即很容易阅读正在发生的事情,但它非常冗长。
是否有以下标准的较短版本?
using(var conn = new SqlConnection(this.connString))
using(var comm = new SqlCommand(DatabaseLayer.procSendEmail,conn))
{
comm.CommandType = CommandType.StoredProcedure;
SqlParameter pmIsTemplate = new SqlParameter("@IsTemplate",SqlDbType.TinyInt);
SqlParameter pmDateInsertKey = new SqlParameter("@DateInsertKey",SqlDbType.Int);
SqlParameter pmEmailTO = new SqlParameter("@EmailTO",SqlDbType.NVarChar,1000);
SqlParameter pmEmailBody = new SqlParameter("@EmailBody",SqlDbType.NVarChar,-1);
SqlParameter pmEmailImportance = new SqlParameter("@EmailImportance",SqlDbType.TinyInt);
SqlParameter pmEmailSubject = new SqlParameter("@EmailSubject",SqlDbType.NVarChar,1000);
SqlParameter pmSuccess = new SqlParameter("@Success",SqlDbType.Bit);
pmIsTemplate.Direction = ParameterDirection.Input;
pmDateInsertKey.Direction = ParameterDirection.Input;
pmEmailTO.Direction = ParameterDirection.Input;
pmEmailBody.Direction = ParameterDirection.Input;
pmEmailImportance.Direction = ParameterDirection.Input;
pmEmailSubject.Direction = ParameterDirection.Input;
pmSuccess.Direction = ParameterDirection.Output;
comm.Parameters.Add(pmIsTemplate);
comm.Parameters.Add(pmDateInsertKey);
comm.Parameters.Add(pmEmailTO);
comm.Parameters.Add(pmEmailBody);
comm.Parameters.Add(pmEmailImportance);
comm.Parameters.Add(pmEmailSubject);
comm.Parameters.Add(pmSuccess);
...
...
也许做这样的事情:
using (var conn = new SqlConnection(this.connString))
{
using (var comm = new SqlCommand(DatabaseLayer.procSendEmail, conn) { CommandType = CommandType.StoredProcedure })
{
comm.Parameters.Add(new SqlParameter("@IsTemplate", SqlDbType.TinyInt));
comm.Parameters.Add(new SqlParameter("@DateInsertKey", SqlDbType.Int));
comm.Parameters.Add(new SqlParameter("@EmailTO", SqlDbType.NVarChar, 1000));
comm.Parameters.Add(new SqlParameter("@EmailBody", SqlDbType.NVarChar, -1));
comm.Parameters.Add(new SqlParameter("@EmailImportance", SqlDbType.TinyInt));
comm.Parameters.Add(new SqlParameter("@EmailSubject", SqlDbType.NVarChar, 1000));
comm.Parameters.Add(new SqlParameter("@Success", SqlDbType.Bit) { Direction = ParameterDirection.Output });
}
}
小问题 - 我对 C#
没有经验。
我有以下代码来调用多参数 SQL-Server 存储过程。 它可以工作,而且很好而且明确,即很容易阅读正在发生的事情,但它非常冗长。
是否有以下标准的较短版本?
using(var conn = new SqlConnection(this.connString))
using(var comm = new SqlCommand(DatabaseLayer.procSendEmail,conn))
{
comm.CommandType = CommandType.StoredProcedure;
SqlParameter pmIsTemplate = new SqlParameter("@IsTemplate",SqlDbType.TinyInt);
SqlParameter pmDateInsertKey = new SqlParameter("@DateInsertKey",SqlDbType.Int);
SqlParameter pmEmailTO = new SqlParameter("@EmailTO",SqlDbType.NVarChar,1000);
SqlParameter pmEmailBody = new SqlParameter("@EmailBody",SqlDbType.NVarChar,-1);
SqlParameter pmEmailImportance = new SqlParameter("@EmailImportance",SqlDbType.TinyInt);
SqlParameter pmEmailSubject = new SqlParameter("@EmailSubject",SqlDbType.NVarChar,1000);
SqlParameter pmSuccess = new SqlParameter("@Success",SqlDbType.Bit);
pmIsTemplate.Direction = ParameterDirection.Input;
pmDateInsertKey.Direction = ParameterDirection.Input;
pmEmailTO.Direction = ParameterDirection.Input;
pmEmailBody.Direction = ParameterDirection.Input;
pmEmailImportance.Direction = ParameterDirection.Input;
pmEmailSubject.Direction = ParameterDirection.Input;
pmSuccess.Direction = ParameterDirection.Output;
comm.Parameters.Add(pmIsTemplate);
comm.Parameters.Add(pmDateInsertKey);
comm.Parameters.Add(pmEmailTO);
comm.Parameters.Add(pmEmailBody);
comm.Parameters.Add(pmEmailImportance);
comm.Parameters.Add(pmEmailSubject);
comm.Parameters.Add(pmSuccess);
...
...
也许做这样的事情:
using (var conn = new SqlConnection(this.connString))
{
using (var comm = new SqlCommand(DatabaseLayer.procSendEmail, conn) { CommandType = CommandType.StoredProcedure })
{
comm.Parameters.Add(new SqlParameter("@IsTemplate", SqlDbType.TinyInt));
comm.Parameters.Add(new SqlParameter("@DateInsertKey", SqlDbType.Int));
comm.Parameters.Add(new SqlParameter("@EmailTO", SqlDbType.NVarChar, 1000));
comm.Parameters.Add(new SqlParameter("@EmailBody", SqlDbType.NVarChar, -1));
comm.Parameters.Add(new SqlParameter("@EmailImportance", SqlDbType.TinyInt));
comm.Parameters.Add(new SqlParameter("@EmailSubject", SqlDbType.NVarChar, 1000));
comm.Parameters.Add(new SqlParameter("@Success", SqlDbType.Bit) { Direction = ParameterDirection.Output });
}
}