/// <summary>
    /// SQL操作类
    /// </summary>
    class Mydata
    {
        SqlConnection conn;
        public Mydata()
        {
            string constr = "server=;database=userinfo; uid=sa; pwd=";//使用本类前请输入连接字符串
            conn = new SqlConnection(constr);
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
        }
        /// <summary>
        /// 执行查询语句并返回DataSet数据集
        /// </summary>
        /// <param name="cmdstr"></param>
        /// <returns></returns>
        public DataSet Getdataset(string cmdstr)
        {
            SqlDataAdapter myadapter = new SqlDataAdapter(cmdstr, conn);
            DataSet result = new DataSet();
            myadapter.Fill(result);
            conn.Close();
            return result;
        }
        public SqlDataReader Getdatareader(string cmdstr)
        {
            SqlCommand cmd = new SqlCommand(cmdstr, conn);
            SqlDataReader result = cmd.ExecuteReader();
            return result;
        }        /// <summary>
        /// 语句执行方法,并返回影响的行数
        /// </summary>
        /// <param name="cmdstr"></param>
        /// <returns></returns>
        public int Sqlcmd(string cmdstr)
        {
            SqlCommand cmd = new SqlCommand(cmdstr, conn);
            int result = (int)cmd.ExecuteScalar();
            conn.Close();
            return result;
        }    }

解决方案 »

  1.   

    连接字符串建议写在配置文件里面而不要硬编码 万一哪天我DB的密码变了呢?难道你再重新编译?
    其他几个方法都要用using 因为如果报异常了的话你就执行不到关闭数据库连接部分的代码了 那就是种非托管资源的浪费 而如果用了using .net内部是会生成try catch finally代码块来帮你最终实现关闭数据库连接的
      

  2.   

    貌似你想写一个SqlHelper对数据库进行操作。其实网上有很多工具可以自动生成。
    没必要总是conn.Close();用using处理就行。比如:
    //连接字符串
     static string connectStr = ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;//返回受影响的行数
           public static int ExecuteNonQuery(string sql, params SqlParameter[] paras)
           {
               using (SqlConnection conn = new SqlConnection(connectStr))
               {
                   using (SqlCommand cmd = new SqlCommand(sql, conn))
                   {
                       cmd.Parameters.AddRange(paras);
                       if (conn.State == ConnectionState.Closed)
                       {
                           conn.Open();
                       }
                       return cmd.ExecuteNonQuery();
                   }
               }
           }
      

  3.   

    你这里面方法就不要 conn.Close 了,创建一个实例,没必要只能执行一条语句吧,既然你在构造函数里打开连接,就将类型继承 IDispose 接口,在接口方法和析构函数里 conn.Close ,让调用方来关闭吧。
      

  4.   

    把数据库的连接字符串写在app.config文件里然后调用就行了
    调用方法如下:
    “引用”中添加:System.Configuration
    类文件中添加: using System.Configuration;
    代码中使用: ConfigurationManager.ConnectionStrings[“连接字符串名称"].ConnectionString;其他参考楼上,有空了LZ可以看看微软提供的SQLHelper
      

  5.   

    一个SQL注入就毁掉你这个类了
      

  6.   

    你这个类只支持sqlserver,无法支持其他数据库
      

  7.   

    conn.Close()应该独立为一个方法public void Close()
    {
       if(this.conn != null)
       {
          conn.Close();
        }
    }在业务逻辑层调用这个方法。
    Mydata sqlhelp = new Mydata();
    当调用了sqlhelp.Getdataset等方法以后,最后要调用Close()方法。
      

  8.   

    sql语句最好不要拼接生成,采用参数是个不错的办法。
    里边有些函数,变量可以改成静态的,前边加static, 不用每次调用都去实例化你这个SqlHelper类。
      

  9.   

    用entity framework,用了一下,感觉还是不错的,增删改查10w条数据一下的速度都可以接受,
    如果需要批量就用bulk
      

  10.   

    楼主说到的类,个人认为连接可以使用单件模型,使用static来实例化连接对象,实现连接的复用,然后connectionstring可以弄到app.setting中,另外,可以再抽象一层,设置一个抽象的数据控制类,然后下面是继承的不同类型的数据控制类,比如sqlclient,oracleclient,mysqlclient等