Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单例模式代码实现_C#_Asp.net Mvc 4_Singleton - Fatal编程技术网

C# 单例模式代码实现

C# 单例模式代码实现,c#,asp.net-mvc-4,singleton,C#,Asp.net Mvc 4,Singleton,我写了下面的代码来连接我的数据库。你们能给我推荐一个比这个更好的选择吗?因为我非常感兴趣的是这台机器的性能如何更好。下面的代码是否实现了单例模式 public static class DbConnect { public static DataTable SqlConnection(string query) { DataTable dt = null; using (SqlConnection

我写了下面的代码来连接我的数据库。你们能给我推荐一个比这个更好的选择吗?因为我非常感兴趣的是这台机器的性能如何更好。下面的代码是否实现了单例模式

    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;
                }
              }
            }
          }
    
    //我已经使用KeyValuePair作为参数;也许专业课会更好
    公共静态数据表SqlConnection(字符串查询,参数KeyValuePair[]参数){
    使用(SqlConnection cn=newsqlconnection(ConfigurationManager.ConnectionStrings[“ConString”].ConnectionString)){
    使用(SqlCommand cmd=cn.CreateCommand()){
    cmd.CommandText=查询;
    //参数,如果提到的话
    如果(!Object.ReferenceEquals(null,参数))
    foreach(参数中的var prm)
    cmd.Parameters.AddWithValue(prm.Key,prm.Value);
    使用(SqlDataAdapter da=newsqldataadapter(cmd)){
    cn.Open();
    DataTable结果=新DataTable();
    da.填写(结果);
    返回结果;
    }
    }
    }
    }
    

    DataTable dt1=SqlConnection(“选择123”);
    数据表dt2=SqlConnection(
    @“选择*
    从MyTable
    其中MyField=@MyParam“,
    新的KeyValuePair(“@MyParam”,123));
    

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

    删除“if(cn.State==ConnectionState.Closed)”:最好得到一个连接中断的异常,而不是隐藏问题并返回一个空的datatable您不分配“query”ro SqlCommand.CommandTextAdd命令参数支持是的,这是个错误,我正要编辑它。还有其他问题吗?这个问题似乎离题了,因为它是关于代码审查的
    DataTable dt1 = SqlConnection("select 123");
    DataTable dt2 = SqlConnection(
                       @"select * 
                          from MyTable 
                         where MyField = @MyParam", 
                       new KeyValuePair<String, Object>("@MyParam", 123));