问题描述
///<summary>///SQL操作类///</summary>classMydata{SqlConnectionconn;publicMydata(){stringconstr="server=;database=userinfo;uid=sa;pwd=";//使用本类前请输入连接字符串conn=newSqlConnection(constr);if(conn.State==ConnectionState.Closed){conn.Open();}}///<summary>///执行查询语句并返回DataSet数据集///</summary>///<paramname="cmdstr"></param>///<returns></returns>publicDataSetGetdataset(stringcmdstr){SqlDataAdaptermyadapter=newSqlDataAdapter(cmdstr,conn);DataSetresult=newDataSet();myadapter.Fill(result);conn.Close();returnresult;}publicSqlDataReaderGetdatareader(stringcmdstr){SqlCommandcmd=newSqlCommand(cmdstr,conn);SqlDataReaderresult=cmd.ExecuteReader();returnresult;}///<summary>///语句执行方法,并返回影响的行数///</summary>///<paramname="cmdstr"></param>///<returns></returns>publicintSqlcmd(stringcmdstr){SqlCommandcmd=newSqlCommand(cmdstr,conn);intresult=(int)cmd.ExecuteScalar();conn.Close();returnresult;}}
解决方案
解决方案二:
连接字符串建议写在配置文件里面而不要硬编码万一哪天我DB的密码变了呢?难道你再重新编译?其他几个方法都要用using因为如果报异常了的话你就执行不到关闭数据库连接部分的代码了那就是种非托管资源的浪费而如果用了using.net内部是会生成trycatchfinally代码块来帮你最终实现关闭数据库连接的
解决方案三:
貌似你想写一个SqlHelper对数据库进行操作。其实网上有很多工具可以自动生成。没必要总是conn.Close();用using处理就行。比如://连接字符串staticstringconnectStr=ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;//返回受影响的行数publicstaticintExecuteNonQuery(stringsql,paramsSqlParameter[]paras){using(SqlConnectionconn=newSqlConnection(connectStr)){using(SqlCommandcmd=newSqlCommand(sql,conn)){cmd.Parameters.AddRange(paras);if(conn.State==ConnectionState.Closed){conn.Open();}returncmd.ExecuteNonQuery();}}}
解决方案四:
你这里面方法就不要conn.Close了,创建一个实例,没必要只能执行一条语句吧,既然你在构造函数里打开连接,就将类型继承IDispose接口,在接口方法和析构函数里conn.Close,让调用方来关闭吧。
解决方案五:
顶楼上的
解决方案六:
把数据库的连接字符串写在app.config文件里然后调用就行了调用方法如下:“引用”中添加:System.Configuration类文件中添加:usingSystem.Configuration;代码中使用:ConfigurationManager.ConnectionStrings[“连接字符串名称"].ConnectionString;其他参考楼上,有空了LZ可以看看微软提供的SQLHelper
解决方案七:
一个SQL注入就毁掉你这个类了
解决方案八:
你这个类只支持sqlserver,无法支持其他数据库
解决方案九:
conn.Close()应该独立为一个方法publicvoidClose(){if(this.conn!=null){conn.Close();}}在业务逻辑层调用这个方法。Mydatasqlhelp=newMydata();当调用了sqlhelp.Getdataset等方法以后,最后要调用Close()方法。
解决方案十:
不要学着写这些东西先,这些都不是什么重点,先把C#的基本东西学完再说。
解决方案十一:
该回复于2012-06-11 08:33:18被版主删除
解决方案十二:
该回复于2012-06-11 08:33:18被版主删除
解决方案十三:
sql语句最好不要拼接生成,采用参数是个不错的办法。里边有些函数,变量可以改成静态的,前边加static,不用每次调用都去实例化你这个SqlHelper类。
解决方案十四:
用entityframework,用了一下,感觉还是不错的,增删改查10w条数据一下的速度都可以接受,如果需要批量就用bulk
解决方案十五:
楼主说到的类,个人认为连接可以使用单件模型,使用static来实例化连接对象,实现连接的复用,然后connectionstring可以弄到app.setting中,另外,可以再抽象一层,设置一个抽象的数据控制类,然后下面是继承的不同类型的数据控制类,比如sqlclient,oracleclient,mysqlclient等