我有一个处理数据库列元数据的类。该类的属性之一是所讨论的表。这通过构造函数传递给对象。同样在构造函数中,我应用了一些逻辑以在类中分配其他变量。为此,有许多专用方法可以连接到数据库,查询有关表的内容,然后将值返回给变量。
我的问题是,我有很多不同的方法可以做几乎相同的事情,但是返回不同的数据类型。例如,我的代码是这样的
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/