单例模式代码实现
本文关键字:实现 代码 单例模式 | 更新日期: 2023-09-27 18:08:50
我已经写了下面的代码连接到我的数据库。你们能给我建议比这个更好的选择吗?因为我对哪一种方式的性能更好非常感兴趣。下面的代码是否实现了单例模式?
public static class DbConnect
{
public static DataTable SqlConnection(string query)
{
DataTable dt = null;
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
if (cn.State == ConnectionState.Closed)
{
dt = new DataTable();
cn.Open();
da.Fill(dt);
}
}
return dt;
}
}
}
}
这样的事情,恕我冒昧,是预料之中的:
- 添加参数支持
- 不隐藏错误:如果连接断开,你应该有一个异常
代码可以是这样的:
// I've used KeyValuePair for parameters; probably a specialized class will be better
public static DataTable SqlConnection(string query, params KeyValuePair<String, Object>[] parameters) {
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ConnectionString)) {
using (SqlCommand cmd = cn.CreateCommand()) {
cmd.CommandText = query;
// Parameters, if they're mentioned
if (!Object.ReferenceEquals(null, parameters))
foreach (var prm in parameters)
cmd.Parameters.AddWithValue(prm.Key, prm.Value);
using (SqlDataAdapter da = new SqlDataAdapter(cmd)) {
cn.Open();
DataTable result = new DataTable();
da.Fill(result);
return result;
}
}
}
}
…
DataTable dt1 = SqlConnection("select 123");
DataTable dt2 = SqlConnection(
@"select *
from MyTable
where MyField = @MyParam",
new KeyValuePair<String, Object>("@MyParam", 123));
注:代码不是一个单例实现,它甚至不是一个类:只是一个静态方法。