<span style="font-size:32px;"><span style="font-size:24px;"><span style="font-size:18px;"> /// <summary> /// 该方法执行传入的增删改SQL语句 /// </summary> /// <param name="sql">要执行的SQL语句</param> /// <returns>返回更新的记录数</returns></span>
<span style="font-size:32px;"> public int ExecuteNonQuery(string sql) //要返回int类型,传入字符串类型的sql. { string connStr=@"server=T;database=news;uid=sa;pwd=1"; //定义一个字符串,来连接数据库。 SqlConnection conn =new SqlConnection(connStr); // 实例化 SqlConnection ,开始连接数据库。 conn.Open(); //打开连接 SqlCommand cmd =new SqlCommand(sql,conn); //实例化一个 SqlCommand,传递的是sql语句和连接的数据库。 int res=cmd.ExecuteNonQuery(); //执行了命令(SQL语句)之后,返回一个int 值,来查看增删改了几条语句。 conn.Close(); //执行了语句,返回了值,就可以关闭数据库了。 Return res; //返回这个值,这样再调用这个sqlhelper之后,就直接得到的是res. } </span></span></span>
<span style="font-size:32px;"><span style="font-size:24px;"><span style="font-size:18px;"> /// <summary> /// 该方法执行传入的SQL查询语句 /// </summary> /// <param name="sql">SQL查询语句</param> /// <returns></returns> Public DataTable ExecuteQuery(string sql) //同上面一样,不过这里返回的是DataTable表,传入的是string sql { DataTable dt=new DataTable(); //要返回datatable,就要先实例化它,不能直接传 String connStr=@"server=T;Database=news;uid=sa;pwd=1"; //依然是要定义连接数据库的语句。 SqlConnection conn=new SqlConnecttion(connStr); //依然要实例化一个连接语句,来传入刚才定义的connstr Conn.Open(); //打开数据库连接 SqlCommand cmd=new SqlCommand(sql,conn); //打开一个数据库连接之后,接着就是用command命令,实例化。 SqlDataReader sdr=cmd.ExecuteReader(); //要返回datatable就要先读出数据,用SqlDataReader方法。 dt.Load(sdr); //将读回的数据放在dt中。 Sdr.Close(); //把SqlDataReader关闭。注意,SqlConnection和SqlDataReader都要关闭,SqlCommand不用关闭,它只是个命令。 Conn.Close(); //最后关闭连接。 Return dt; //返回dt. } </span></span></span>
以上的sqlHelper语句还不是很精简,下面再来给它瘦身一下,把共同的代码写到一起,更高效的利用。
首先,添加一个类,把一些重复的语句再写到一个公共的类里面:
public SQLHelper()'初始打开数据库连接 { string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; conn = new SqlConnection(connStr); }这里需要在web.config文件下写连接的数据库的信息
再来一个判断类:如果数据库的状态是关闭的,那么就打开数据库。
private SqlConnection GetConn() { if (conn.State == ConnectionState.Closed) { conn.Open(); } return conn; }具体的查询方法,这里涉及到SQL注入的问题,所以用参数格式来编写,安全的保护代码不被SQL注入。
/// <summary> /// 执行带参数的sql增删改语句 /// </summary> /// <param name="sql">sql增删改语句</param> /// <param name="paras">参数集合</param> /// <returns></returns>
public int ExecuteNonQuery(string sql,SqlParameter []paras) { int res; using (cmd = new SqlCommand(sql,GetConn ())) { cmd.Parameters.AddRange(paras); res = cmd.ExecuteNonQuery(); } return res; }
下面的代码是把查询的sqlHelper语句精简了一下:
/// <summary> /// 该方法执行传入的SQL查询语句 /// </summary> /// <param name="sql">SQL查询语句</param> /// <returns></returns>
public DataTable ExecuteQuery(string sql) { DataTable dt = new DataTable(); cmd = new SqlCommand(sql, GetConn()); using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } return dt; }
这里只是简单的SqlHelper语句,从之前的一点不懂,直接用,到现在能自己写一个SqlHelper语句,是在一点点进步的,有收获就要常总结,颗粒归仓。