代码之家  ›  专栏  ›  技术社区  ›  whytheq

如何简化这个冗长的ADO.NET数据库代码

  •  0
  • whytheq  · 技术社区  · 6 年前

    小问题-我没有经验 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);
    
      ...
      ...
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Outman    6 年前

    可能会这样做:

    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 });
        }
    }