前言
数据库的连接非常重要,以前对于数据库的连接都是照着敲,今天总结了一下,发现可以完全的背着敲下连接数据库的所有代码!总结可以让你的思路满满的变得清晰,接下来一起来看看我的总结吧!
连接数据库
增删改:
思想:我们做完数据库的增删改是否成功,需要我们进行判断,那么微软就给出了ExecuteNonQuery这个鬼东西,根据他的返回值我们可以对我们的操作进行判断是否成功!如果返回的值大于0,那么就代表操作成功了,否则操作失败!
public class SqlHelper
{
public int test()
{
//第一步,连接数据库
string connstr = "server=.;database=newssystem;USER ID=sa;pwd=123456";//无论是USER ID还是uid 还是userid都是对的
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
//第二步,调用sql语句
string sql = "Insert into caregory(name) values('sdfasfa');";
SqlCommand cmd = new SqlCommand(sql,conn);
int res = cmd.ExecuteNonQuery();
conn.Close();
//第三步,返回值
return res;
}
}
上面的代码就是一个简单的测试,亲测完全成功,但是我们做的程序是面向对象的,当创建多个这样的方法时候,代码就会冗余,而且当我们修改了我们数据库的用户名或者密码的时候,我们就需要修改我们的类了,这违背了开发封闭原则,所以我们把数据库的密码和用户名放在配置文件中!下面是进一步的重构!
public class SQLHelper
{
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public SQLHelper()
{
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
conn = new SqlConnection(connStr);
}
private SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
/// <summary>
/// 执行不带参数的sql增删改语句
/// </summary>
/// <param name="sql">要执行的sql增删改语句</param>
/// <returns></returns>
public int ExecuteNonQuery(string sql)
{
int res;
using (cmd = new SqlCommand(sql, GetConn())) //using让我们的数据库在连接完会自动关闭
{
res = cmd.ExecuteNonQuery();
}
return res;
}
}
查:
它与增删改有一点不一样,因为增删改我们知识单单的判断成不成功就行了,但是我们的查是要将数据库中表中的具体的内容读出来! 它对应的是ExecuteQuery!其中需要Execute Reader将表中的数据一条一条的读出来!
/// <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)) //cmd.ExecuteReader(CommandBehavior.CloseConnection)返回的是一个SqlDataReader对象!
{
dt.Load(sdr); //加载表中的内容到datatable
}
return dt;
}
接下来对CommandBehavior.CloseConnection做一些解释:
CommandBehavior.CloseConnection解决了流读取数据模式下,数据库连接不能有效关闭的情况。当某个XXXDataReader对象在生成时使用了CommandBehavior.CloseConnection,那数据库连接将在XXXDataReader对象关闭时自动关闭。
而CommandBehavior.CloseConnection的功能恰好就是为了避免类似的尴尬境地,它能够保证当SqlDataReader对象被关闭时,其 依赖的连接也会被自动关闭。
这里解释的比较简单,我是看了一篇博客之后,猜彻底明白了CommandBehavior.CloseConnection是怎么保证数据库关闭的!
博客连接:https://www.cnblogs.com/agian/articles/1648835.html
后记
原本以为自己已经很明白了一些东西,所以就没有进行总结,但是当试图给别名人讲明白的时候,发现我必须总结!总结过后一定会有不一样的感觉!