SqlHelper的具体写法

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身份验证的钥匙.





  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值