单例模式代码实现

本文关键字:实现 代码 单例模式 | 更新日期: 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;
                }
            }
        }
    }

单例模式代码实现

这样的事情,恕我冒昧,是预料之中的:

  1. 添加参数支持
  2. 不隐藏错误:如果连接断开,你应该有一个异常

代码可以是这样的:

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

注:代码不是一个单例实现,它甚至不是一个:只是一个静态方法