using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Configuration;
/*
* 所屬層次:數據訪問類組件(數據操作)
*/
namespace DBUtility
{
/// <summary>
/// SqlHelper類用於操作數據庫(可升級,擴展) 抽象類+靜態方法。
/// </summary>
public abstract class SqlHelper
{
//數據庫連接字符串
//連接字符串在界面層的...的配置文件中。
//public static readonly string ConnectionStringSqlServer = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
/// <summary>
/// 給定連接的數據庫用假設參數執行一個sql命令(不返回數據集)
/// </summary>
/// <param name="connectionString">一個有效的連接字符串</param>
/// <param name="commandType">命令類型(存儲過程, 文本, 等等)</param>
/// <param name="commandText">存儲過程名稱或者sql命令語句</param>
/// <param name="commandParameters">執行命令所用參數的集合</param>
/// <returns>執行命令所影響的行數</returns>
public static int ExecuteNonQuery( CommandType cmdType, string cmdText, SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connectionString))
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = cmdType;
if (cmd.Parameters != null)
{
cmd.Parameters.Clear();
}
if (commandParameters != null)
{
foreach (SqlParameter parm in commandParameters)
cmd.Parameters.Add(parm);
}
try
{
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
catch
{
//關閉連接,拋出異常
conn.Close();
throw;
}
finally
{
conn.Close();
}
}
}
/// <summary>
/// 執行存儲過程,返回一個輸出參數
/// </summary>
/// <param name="connectionString">一個有效的連接字符串</param>
/// <param name="cmdText">存儲過程名稱</param>
/// <param name="commandParameters">執行命令所用參數的集合</param>
/// <returns>輸出參數</returns>
public static object ExecuteProcGetOutput( string cmdText, string outputParaName, SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connectionString))
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.StoredProcedure;
if (commandParameters != null)
{
foreach (SqlParameter parm in commandParameters)
cmd.Parameters.Add(parm);
}
try
{
cmd.ExecuteNonQuery();
object val = cmd.Parameters[outputParaName].Value;
cmd.Parameters.Clear();
return val;
}
catch
{
//關閉連接,拋出異常
conn.Close();
throw;
}
}
}
/// <summary>
/// 用執行的數據庫連接執行一個返回數據集的sql命令
/// </summary>
/// <param name="connectionString">一個有效的連接字符串</param>
/// <param name="commandType">命令類型(存儲過程, 文本, 等等)</param>
/// <param name="commandText">存儲過程名稱或者sql命令語句</param>
/// <param name="commandParameters">執行命令所用參數的集合</param>
/// <returns>包含結果的讀取器</returns>
public static SqlDataReader ExecuteReader( CommandType cmdType, string cmdText, SqlParameter[] commandParameters)
{
//創建一個SqlCommand對象
SqlCommand cmd = new SqlCommand();
//創建一個SqlConnection對象
SqlConnection conn = new SqlConnection(connectionString);
//不能使用using 因爲要返回SqlDataReader,否則外面的SqlDataReader不能使用。
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = cmdType;
if (commandParameters != null)
{
foreach (SqlParameter parm in commandParameters)
cmd.Parameters.Add(parm);
}
try
{
//調用 SqlCommand 的 ExecuteReader 方法
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//清除參數
cmd.Parameters.Clear();
return reader;
}
catch
{
conn.Close();
throw;
}
}
/// <summary>
/// 用執行的數據庫連接執行一個返回一張表命令
/// </summary>
/// <param name="connectionString">一個有效的連接字符串</param>
/// <param name="commandText">存儲過程名稱或者sql命令語句</param>
/// <param name="commandParameters">執行命令所用參數的集合</param>
/// <returns>包含結果的讀取器</returns>
public static DataTable ExectuteDataTable(string cmdText, SqlParameter[] commandParameters)
{
//創建一個SqlConnection對象
SqlConnection conn = new SqlConnection(connectionString);
//創建一個SqlDataAdapter對象
SqlDataAdapter sda = new SqlDataAdapter(cmdText,conn);
if (commandParameters != null)
{
foreach (SqlParameter parm in commandParameters)
sda.SelectCommand.Parameters.Add(parm);
}
try
{
//調用 SqlCommand 的 ExecuteReader 方法
DataTable dt = new DataTable();
sda.Fill(dt);
//清除參數
sda.SelectCommand.Parameters.Clear();
return dt;
}
catch
{
conn.Close();
throw;
}
}
}
}