1,使用C#进行连接数据库操作时一般会用到SqlHelper
这个封装的类我刚开始自己学习的时候,连接数据库总是一坨代码,不仅难看,而且不好改。
看了有关传智的一些资料后,我慢慢改正了自己一些些代码的缺点,现在我就来说一下有关SqlHelper的具体封装。
2.SqlHelper的具体封装
因为一般SqlHelper会在整个项目中使用,所以一般会把它写成静态类。
(1)执行insert/delete/update的方法
public static int ExecuteNonQuery(string sql,CommandType type,params SqlParamter[] para)
{}
这个方法有3个参数,分别是sql(所需的sql语句),type(选择是普通的SQL语句还是存储过程),para(这个是传入的多个可变参数)
返回值是int类型,返回影响的行数
using(SqlConnection conn=new SqlConnection(connStr))
{
using(SqlCommand cmd=new SqlCommand(sql,conn))
{
//再下一步写里面的内容
}
}
这是方法里面的内容
这里用到了SqlConnection和SqlCommand,分别是数据连接函数和数据命令函数
前者是用于连接数据库,传入的参数connStr就是连接字符串
后者用于使用Sql语句对数据库的数据进行处理
using的作用是到结束时释放资源,就相当于Dispose和Close
{
cmd.CommandType=type;
if(para!=null)
{
cmd.Paramter.AddRange(para);
}
conn.Open();
return cmd.ExecuteNonQuery();
}
这时写在SqlCommand里面的内容
要先判断传入的可变参数是否为空,不为空就将传入的参数加到Sql语句中
在这里要注意,conn越晚打开越好,一般是在执行查询函数之前打开。
最后返回 执行的查询函数得到的结果(也就是影响的行数)
(2)执行返回单个值得方法
因为与前一个方法基本一样,就直接贴代码了
public static object ExecuteScalar(string sql, CommandType type, params SqlParameter[] para)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.CommandType = type;
if (para != null)
{
cmd.Parameters.AddRange(para);
}
conn.Open();
return cmd.ExecuteScalar();
}
}
}
(3)返回SqlDataReader的方法
public static SqlDataReader ExecuteScalar(string sql, CommandType type, params SqlParameter[] para)
{
SqlConnection conn = new SqlConnection(connStr);
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.CommandType = type;
if (para != null)
{
cmd.Parameters.AddRange(para);
}
try
{
conn.Open();
return cmd.ExecuteReader(CommandBehacior.CloseConnection);
}
catch
{
conn.Close();
conn.Dispose();
throw;
}
}
}
这里只说一下不同的地方,
为什么SqlConnection没有使用using?
因为如果使用返回的Reader对象的话,SqlConnection就必须保持打开,
而using在结束时就释放资源了。
为什么使用try。。。catch?
因为如果直接返回Reader对象的话,SqlConnection对象一直保持打开状态,
无法将其关闭。
CommandBehacior.CloseConnection
的作用就是在Reader对象使用完后,关闭SqlConnection,
(4)返回DataTable对象
public static DataTable ExecuteDataTable(string sql, CommandType type, params SqlParameter[] para)
{
DataTable dt = new DataTable();
using (SqlDataAdapter adapter=new SqlDataAdapter(sql,connStr))
{
adapter.SelectCommand.CommandType = type;
if (para != null)
{
adapter.SelectCommand.Parameters.AddRange(para);
}
adapter.Fill(dt);
return dt;
}
}
不用打开连接,SqlDataAdapter内部会自动打开
adapter的Fill方法是将数据从内存中读到DataTable
3.有关连接字符串的小知识
它的作用就是打开数据库的一把钥匙!
一般将它定义在App.config中
写法一般有两种:
(1)Data Source=(local);Initial Catalog=这里写数据库名称;Integrated Security=true;
这种方法是连接window登陆的钥匙
(2)Data Source=(local);Initial Catalog=这里写数据库名称;User ID=这里写用户名;Password=这里写密码
这种方法是连接Sql Server身份验证的钥匙.