sqlHelp是一个基于.NET Framework的数据库操作组件,组件中包含数据库操作方法。无需重复的去写SqlConnection,SqlCommand,SqlDataReader等。SqlHelp封装过后只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了。
这里的SqlHelp主要包括一个属性和四个方法:
ConnetionStringLocalTransaction:获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改。
public static int ExecuteNonQuery(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters):执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串
public static SqlDataReader ExecuteReader(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters):执行一条返回结果集的sqlCommand命令,通过专用的连接字符串
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters):执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串
private static void PrepareCommand(SqlCommand cmd,SqlConnection conn,SqlTransaction trans,CommandType cmdType,string cmdText,SqlParameter[] cmdParms):为执行命令准备参数
ExecuteNonQuery、ExecuteReader、ExecuteScalar三个方法参数是相同的:
string connectionString:一个有效的数据库连接字符串
CommandType cmdType:sqlCommand的命令类型
string cmdText:存储过程的名字或T-SQL语句
params SqlParameter[] commandParameters:以数组的形式提供sqlCommand命令中用到的参数列表
PrepareCommand的参数:
SqlCommand cmd:sqlCommand命令
SqlConnection conn:已经存在的数据库连接
SqlTransaction trans:数据库的事务处理
CommandType cmdType:sqlCommand的命令类型
string cmdText:Command text,T-SQL语句 例如 Select * from StdInfo
SqlParameter[] cmdParms:返回带参数的命令
代码如下:
public class sqlHelp : ApiController
{
//获取数据库连接字符串,属于静态变量且只读,项目中所有的文档可以直接引用,但不能修改
public static readonly string ConnetionStringLocalTransaction=
ConfigurationManager.ConnectionStrings["stdInfoConnectionString"].ConnectionString ;
/// <summary>
/// 执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串
/// 使用参数数组形式提供参数列表
/// </summary>
public static int ExecuteNonQuery(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
using(SqlConnection conn=new SqlConnection(connectionString))
{
//通过PrepareCommand方法将参数逐个加入到sqlCommand的参数集合中 这里的PrepareCommand是一个自定义方法,要去实现
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
/// <summary>
/// 执行一条返回结果集的sqlCommand命令,通过专用的连接字符串
/// 使用参数数组提供参数
/// </summary>
///
public static SqlDataReader ExecuteReader(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
//在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在,CommandBehavior.closeConnection的语句就不会执行
//出发的异常由Catch捕获
//关闭数据库连接,并通过throw再次引发捕捉到的异常
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
///<summary>
///执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串
///使用参数数组提供参数
///</summary>
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
using (SqlConnection connection = new SqlConnection(connectionString))
{
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
private static void PrepareCommand(SqlCommand cmd,SqlConnection conn,SqlTransaction trans,CommandType cmdType,string cmdText,SqlParameter[] cmdParms)
{
//判断数据库连接状态
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
cmd.Connection = conn;
cmd.CommandText = cmdText;
//判断是否需要事务处理
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if(cmdParms!=null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
}