我有一个处理数据库列元数据的类。该类的属性之一是所讨论的表。这通过构造函数传递给对象。同样在构造函数中,我应用了一些逻辑以在类中分配其他变量。为此,有许多专用方法可以连接到数据库,查询有关表的内容,然后将值返回给变量。

我的问题是,我有很多不同的方法可以做几乎相同的事情,但是返回不同的数据类型。例如,我的代码是这样的

public Column(string tableName)
{
   strTableName = tableName;
   pkColumnName = GetPKColumnName(tableName);
   pkColumnLenght = GetPKColumnLenght(tableName);
}

private string GetPKColumnName(string tableName)
{
   string query = String.Format("SELECT myColName FROM myTable where myTableName = {0}",  tableName);
   string result = "";
   try
   {
       using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString))
         {
          con.Open();
          using (SqlCommand command = new SqlCommand(query, con))
          {
             result = (string)command.ExecuteScalar();
          }
         }
    }
    catch (SqlException ex)
    {
         Console.WriteLine(ex.Message);
    }
 return result;
}

private int GetPKColumnLenght(string tableName)
    {
       string query = String.Format("SELECT myColLenght FROM myTable where myTableName = {0}",  tableName);
       int result = 0;
       try
       {
           using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString))
             {
              con.Open();
              using (SqlCommand command = new SqlCommand(query, con))
              {
                 result = (int)command.ExecuteScalar();
              }
             }
        }
        catch (SqlException ex)
        {
             Console.WriteLine(ex.Message);
        }
     return result;
    }


还有许多其他类似的方法。这对我来说看起来并不好,所以我想知道最佳实践是什么。

将返回值分配给变量时,我应该只将返回类型声明为一个对象并进行数据类型转换吗?

最佳答案

创建SqlManager

public class SqlManager
{

    public static string ConnectionString
    {
        get
        {
            return "Your ConnectionString"
        }
    }

    public static SqlConnection GetSqlConnection(SqlCommand cmd)
    {
        if (cmd.Connection == null)
        {
            SqlConnection conn = new SqlConnection(ConnectionString);

            conn.Open();

            cmd.Connection = conn;

            return conn;
        }

        return cmd.Connection;
    }

    public static object ExecuteScalar(SqlCommand cmd)
    {

        SqlConnection conn = GetSqlConnection(cmd);

        try
        {
            return cmd.ExecuteScalar();
        }
        catch
        {
           throw;
        }
        finally
        {
           conn.Close();
        }
   }

}


现在,您的方法,第二件事是相同的:

private string GetPKColumnName(string tableName)
{
    string query = String.Format("",  tableName);

    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = @"SELECT myColName FROM myTable where myTableName = @TableName";

    cmd.Parameters.AddWithValue("@TableName", tableName);

    object result = SqlManager.ExecuteScalar(cmd);

    return result != null ? (int)object: 0;
}

关于c# - C#减少用于从数据库获取数据的方法的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40384154/

10-09 17:16
查看更多