从现在开始写一个属于自己的类库,以后在编程的时候如果以前编写过相同的代码的话这时候可以直接拿过来调用,新手菜鸟,纯属娱乐,不要见笑!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace _0411
{
public class SqlHelper
{
//创建App.config配置文件的连接字符串
private static readonly string constr = ConfigurationManager.ConnectionStrings["sdb"].ConnectionString;
//private static readonly string constr = "Data Source=1-PC;Initial Catalog=TestHomework;Integrated Security=true";
//1.封装insert、delete、update函数ExecuteNonQuery();
public static int ExecuteNonQuery(string sql, params SqlParameter[] pms)
{
//创建连接对象
using (SqlConnection con = new SqlConnection(constr))
{
//创建执行对象
using (SqlCommand cmd = new SqlCommand(sql, con))
{
//首先判断sql语句中是否有参数
if (pms != null)
{
//存在可变参数,讲可变参数加入
cmd.Parameters.AddRange(pms);
}
//参数加入后,打开连接对象
con.Open();
//返回执行语句后所影响的行数
return cmd.ExecuteNonQuery();
}
}
}
//2.封装返回单个值的执行语句 ExecuteScalar();
public static object ExecuteScalar(string sql, params SqlParameter[] pms)
{
//创建连接对象
using (SqlConnection con = new SqlConnection(constr))
{
//创建执行对象
using (SqlCommand cmd = new SqlCommand(sql, con))
{
//首先判断sql语句中是否存在参数
if (pms != null)
{
//存在就讲参数加入
cmd.Parameters.AddRange(pms);
}
//打开数据库
con.Open();
//返回执行语句后的值
return cmd.ExecuteScalar();
}
}
}
//3.封装返回多个值的执行语句 ExecuteReader();
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms)
{
//首先创建连接对象,因为执行ExecuteReader需要所在连接必须打开,所以不能使用using
SqlConnection con = new SqlConnection(constr);
//创建执行对象
using (SqlCommand cmd = new SqlCommand(sql, con))
{
//首先判断sql语句中是否有参数
if (pms != null)
{
//将参数加入
cmd.Parameters.AddRange(pms);
}
//存在异常 ,抓取异常
try
{
//打开数据库
con.Open();
//返回值 括号内的语句是关闭连接
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{ //关闭,释放资源
con.Close();
con.Dispose();
throw;
}
}
}
}
}