OperateDatabase.cs檔案代碼:
using System;
using System.Data;
using System.Collections;
using System.Data.SqlClient;
using System.Configuration;
namespace Gogofly.OperateSqlServer
{
public class OperateDatabase
{
#region 定義屬性
/// <summary>
/// 定義在web.config中辨別連接配接字元串的Name屬性的值
/// </summary>
private static string connectionStringNameInWebConfig = "SQLSERVERCONNECTIONSTRING";
public static string ConnectionStringNameInWebConfig
{
get
{
return connectionStringNameInWebConfig;
}
set
{ ///字元串不能為空或空引用
if(!string.IsNullOrEmpty(value))
{
connectionStringNameInWebConfig = value;
}
}
/// 儲存執行資料庫操作傳回值的參數辨別
private static string returnValueString = "RETURNVALUESTRING";
public static string ReturnValueString
return returnValueString;
}
#endregion
#region 建立參數
/// 建立參數
/// <param name="ParamName">存儲過程名稱</param>
/// <param name="DbType">參數類型</param>
/// <param name="Size">參數大小</param>
/// <param name="Direction">參數方向</param>
/// <param name="Value">參數值</param>
/// <returns>新的 parameter 對象</returns>
private static SqlParameter CreateParam(string ParamName,SqlDbType DbType,
Int32 Size,ParameterDirection Direction,object Value)
SqlParameter param;
if(Size > 0)
{ ///使用size建立大小不為0的參數
param = new SqlParameter(ParamName,DbType,Size);
else
param = new SqlParameter(ParamName,DbType);
///建立輸出類型參數
param.Direction = Direction;
if(!(Direction == ParameterDirection.Output && Value == null))
param.Value = Value;
///傳回參數
return param;
/// 建立輸入類型參數
/// <param name="DbType">參數類型</param></param>
/// <returns>新的parameter 對象</returns>
public static SqlParameter CreateInParam(string ParamName,
SqlDbType DbType,int Size,object Value)
return CreateParam(ParamName,DbType,Size,ParameterDirection.Input,Value);
/// 建立輸出類型參數
public static SqlParameter CreateOutParam(string ParamName,
SqlDbType DbType,int Size)
return CreateParam(ParamName,DbType,Size,ParameterDirection.Output,null);
/// 建立傳回類型參數
public static SqlParameter CreateReturnParam(string ParamName,
return CreateParam(ParamName,DbType,Size,ParameterDirection.ReturnValue,null);
#region 建立SqlCommand和SqlDataAdapter
/// 建立SqlCommand對象
/// <param name="procName">存儲過程的名稱</param>
/// <param name="prams">存儲過程所需參數</param>
/// <returns>傳回SqlCommand對象</returns>
private static SqlCommand CreateSqlCommand(string procName,
params SqlParameter[] prams)
{ ///建立資料庫連接配接
SqlConnection sqlCon = CreateSqlConnection();
///打開資料庫連接配接
if(sqlCon == null) return null;
if(sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
///設定SqlCommand的屬性
SqlCommand cmd = new SqlCommand(procName,sqlCon);
cmd.CommandType = CommandType.StoredProcedure;
///添加存儲過程參數
if(prams != null)
foreach(SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
///添加傳回參數
cmd.Parameters.Add(new SqlParameter(returnValueString,
SqlDbType.Int,4,ParameterDirection.ReturnValue,
false,0,0,string.Empty,DataRowVersion.Default,null));
///傳回SqlCommand對象
return cmd;
/// 建立SqlDataAdapter對象
/// <returns>傳回SqlDataAdapter對象</returns>
private static SqlDataAdapter CreateSqlDataAdapter(string procName,
///設定SqlDataAdapter的屬性
SqlDataAdapter da = new SqlDataAdapter(procName,sqlCon);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(parameter);
da.SelectCommand.Parameters.Add(new SqlParameter(returnValueString,
///傳回SqlDataAdapter對象
return da;
/// <summary>
/// 防止SQL注入式攻擊
/// </summary>
/// <returns>傳回整型資料</returns>
public static int checkLogin(string loginName, string loginPwd)
{
int result;
///建立資料庫連接配接
SqlConnection con = CreateSqlConnection();
myCommand.Parameters.Add(new SqlParameter("@loginName", SqlDbType.VarChar, 50));
myCommand.Parameters["@loginName"].Value = loginName;
myCommand.Parameters.Add(new SqlParameter("@loginPwd", SqlDbType.VarChar, 225));
myCommand.Parameters["@loginPwd"].Value = loginPwd;
myCommand.Parameters.Add(new SqlParameter("@RoleID", SqlDbType.Int));
myCommand.Parameters["@RoleID"].Value = 1;
myCommand.Connection.Open();
result = (int)myCommand.ExecuteScalar();
myCommand.Connection.Close();
return result;
}
#region 管理連接配接
/// 建立連接配接.
private static SqlConnection CreateSqlConnection()
{ ///擷取連接配接字元串
string conStr = (string)Cache.GetData(connectionStringNameInWebConfig);
if(string.IsNullOrEmpty(conStr))
{
try
{ ///如果連接配接字元串為空,則從配置檔案中擷取連接配接字元串
conStr = ConfigurationManager.ConnectionStrings[connectionStringNameInWebConfig].ConnectionString;
catch(Exception ex)
throw new Exception(ex.Message,ex);
///把字元串添加到緩存中
Cache.CachingData(connectionStringNameInWebConfig,conStr);
if(!string.IsNullOrEmpty(conStr))
{ /// 建立資料庫連接配接
return(new SqlConnection(conStr));
return null;
/// 說明:GetDataSet資料集,傳回資料源的資料集
/// 傳回值:資料集DataSet
/// 參數:sQueryString SQL字元串,TableName 資料表名稱
public static DataSet GetDataSet(string sQueryString, string TableName)
con.Open();
SqlDataAdapter dbAdapter = new SqlDataAdapter(sQueryString, con);
DataSet dataset = new DataSet();
dbAdapter.Fill(dataset, TableName);
con.Close();
return dataset;
#region 執行存儲過程
/// 執行存儲過程
/// <returns></returns>
public static int RunProc(string procName)
{ ///建立SqlCommand對象
SqlCommand cmd = CreateSqlCommand(procName,null);
if(cmd == null) return -1;
try
{ ///執行存儲過程
cmd.ExecuteNonQuery();
catch(Exception ex)
throw new Exception(ex.Message,ex);
finally
{ ///關閉連接配接
if(cmd.Connection.State == ConnectionState.Open)
cmd.Connection.Close();
///傳回執行結果
return (int)cmd.Parameters[returnValueString].Value;
/// <param name="procName">存儲過程名稱</param>
/// <param name="prams">存儲過程參數</param>
public static int RunProc(string procName,params SqlParameter[] prams)
SqlCommand cmd = CreateSqlCommand(procName,prams);
return (int)cmd.Parameters[returnValueString].Value;
/// <param name="dr">傳回SqlDataReader對象</param>
public static void RunProc(string procName,out SqlDataReader dr)
if(cmd == null)
dr = null;
return;
{ ///讀取資料
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
/// <param name="prams">存儲過程參數</param>
public static void RunProc(string procName,out SqlDataReader dr,params SqlParameter[] prams)
}
/// <param name="ds">傳回DataSet對象</param>
public static void RunProc(string procName,ref DataSet ds)
{ ///初始化ds
if(null == ds) ds = new DataSet();
///建立SqlDataAdapter
SqlDataAdapter da = CreateSqlDataAdapter(procName,null);
if(da == null) return;
{ ///填充資料
da.Fill(ds);
if(da.SelectCommand.Connection.State == ConnectionState.Open)
da.SelectCommand.Connection.Close();
public static void RunProc(string procName,ref DataSet ds,params SqlParameter[] prams)
SqlDataAdapter da = CreateSqlDataAdapter(procName,prams);
/// <param name="start">開始的記錄</param>
/// <param name="max">最大記錄數量</param>
public static void RunProc(string procName,ref DataSet ds,
int start,int max)
da.Fill(ds,start,max,"TableName");
int start,int max,params SqlParameter[] prams)
/// <returns>傳回存儲過程傳回值</returns>
public static int RunProcScalar(string procName)
int result;
///執行存儲過程
result = (int)cmd.ExecuteScalar();
///傳回查詢結果
return result;
public static int RunProcScalar(string procName,params SqlParameter[] prams)
{ ///建立SqlCommand對象
#endregion
}
internal class Cache
#region 緩存資料
/// 定義緩存區
private static Hashtable cache = Hashtable.Synchronized(new Hashtable());
/// 緩存資料到Cache中,如果已經存在緩存項,則重寫緩存的資料。
/// <param name="key"></param>
/// <param name="value"></param>
public static void CachingData(string key,object value)
cache[key] = value;
/// 擷取緩存的資料
public static object GetData(string key)
return (object)cache[key];
}