using System;
using System.Data;
using System.Data.SqlClient;
這是命名空間,不用多講解了吧。
public class DAL //定義一個(gè)類
{
string cnstr="data source=.;initial catalog=company;persist security info=False;user id=sa;pwd=sa;";
//定義連接數(shù)據(jù)庫的連接字符串
private SqlCommand cm=new SqlCommand(); //建立Command對(duì)象
//定義一個(gè)全局的Command 對(duì)象。
public SqlCommand getCommand //返回Command對(duì)象
{
get {return cm;}
}
public DAL() //構(gòu)造函數(shù)
{
cm.Connection=new SqlConnection(cnstr);
}
下面是添加存儲(chǔ)過程參數(shù)的部分
//---------------------------------------------------------
//添加參數(shù)
//---------------------------------------------------------
如果要執(zhí)行新的存儲(chǔ)過程,需要先清除以前添加的存儲(chǔ)過程的參數(shù)
//清除參數(shù)
public void ClearParameter()
{cm.Parameters.Clear();}
這是一個(gè)通用的添加參數(shù)的函數(shù)。
//全部的參數(shù)
public void addNewParameter(string ParameterName,string ParameterValue,SqlDbType sqlType,int size,string Direction)
{
cm.Parameters.Add(ParameterName,sqlType,size); //添加存儲(chǔ)過程的參數(shù)
cm.Parameters[ParameterName].Value=ParameterValue; //負(fù)值
cm.Parameters[ParameterName].Direction=getDirection(Direction);//設(shè)置方向
}
//方向?yàn)檩斎氲?br> public void addNewParameter(string ParameterName,string ParameterValue,SqlDbType sqlType,int size)
{
cm.Parameters.Add(ParameterName,sqlType,size); //添加存儲(chǔ)過程的參數(shù)
cm.Parameters[ParameterName].Value=ParameterValue; //負(fù)值
//cm.Parameters[ParameterName].Direction=getDirection(Direction);//設(shè)置方向
}
下面是把常用的幾個(gè)數(shù)據(jù)類型提出來,方便操作。
這是專門添加 int 數(shù)據(jù)類型的參數(shù)
//添加int型的參數(shù)
public void addNewParameter(string ParameterName,int ParameterValue)
{
cm.Parameters.Add(ParameterName,SqlDbType.Int,4); //添加存儲(chǔ)過程的參數(shù)
cm.Parameters[ParameterName].Value=ParameterValue; //負(fù)值
//設(shè)置方向取默認(rèn)值——輸入
}
這是專門添加 nvarChar 數(shù)據(jù)類型的參數(shù)
//添加nvarChar型的參數(shù)
public void addNewParameter(string ParameterName,string ParameterValue,int size)
{
cm.Parameters.Add(ParameterName,SqlDbType.NVarChar,size); //添加存儲(chǔ)過程的參數(shù)
cm.Parameters[ParameterName].Value=ParameterValue; //負(fù)值
//設(shè)置方向取默認(rèn)值——輸入的
}
這是專門添加 Bit 數(shù)據(jù)類型的參數(shù)
//添加bit型的參數(shù)
public void addNewParameter(string ParameterName,bool ParameterValue)
{
cm.Parameters.Add(ParameterName,SqlDbType.Bit); //添加存儲(chǔ)過程的參數(shù)
cm.Parameters[ParameterName].Value=ParameterValue; //負(fù)值
//設(shè)置方向取默認(rèn)值——輸入的
}
如果你還有其他的數(shù)據(jù)類型也是經(jīng)常使用的,可以再加相應(yīng)的函數(shù)。
參數(shù)加完了,下面就可以運(yùn)行存儲(chǔ)過程了
//-------------------------------------------------------------
// 運(yùn)行、返回記錄集
//-------------------------------------------------------------
通過傳入的存儲(chǔ)過程的名稱來執(zhí)行存儲(chǔ)過程,把返回的記錄集放到DataSet里面,如果是多個(gè)記錄集的話,分別放在Table[0]、Table[1]、Table[2]……
//運(yùn)行存儲(chǔ)過程返回DataSet
public DataSet runSPDataSet(string StoredProcedureName)
{
//cm.Connection=new SqlConnection(cnstr);
cm.CommandText=StoredProcedureName;
cm.CommandType=CommandType.StoredProcedure;
try
{
SqlDataAdapter da=new SqlDataAdapter(cm);
DataSet DS=new DataSet();
da.Fill(DS);
return DS;
}
catch(Exception ex)
{
throw ex;
}
finally
{
cm.Connection.Close();
}
}
通過傳入的存儲(chǔ)過程的名稱來執(zhí)行存儲(chǔ)過程,把返回的第一個(gè)記錄集里的第一條記錄放在Object 數(shù)組里。多用在顯示詳細(xì)信息里,因?yàn)檫@種情況大多都是只用一條記錄的。如果是空的話返回 strValue[0]="null" 。
//運(yùn)行存儲(chǔ)過程返回第一條記錄的數(shù)組
public Object[] runSPItems(string StoredProcedureName)
{
Object[] strValue=new Object[1];
cm.CommandText=StoredProcedureName;
cm.CommandType=CommandType.StoredProcedure;
try
{
cm.Connection.Open();
SqlDataReader r = cm.ExecuteReader(CommandBehavior.CloseConnection);
if (r.Read())
{
strValue=new Object[r.FieldCount];
r.GetValues(strValue);
}
else
{
strValue[0]="null";
}r.Close();
}
catch(Exception ex)
{
throw ex;
}
finally
{
cm.Connection.Close();
}
return strValue;
}
如果你想用 DataReader 的話,可以用這個(gè)函數(shù)返回Command對(duì)象,然后用Command.ExecuteReader,最后再用Command.Connection.Close(),關(guān)閉連接。應(yīng)該還有更好的方法吧,總之我是很少用DataReader 的。
//加入存儲(chǔ)過程需要的參數(shù),返回command
public SqlCommand getSPCommand(string StoredProcedureName)
{
//cm.Connection=new SqlConnection(cnstr);
cm.CommandText=StoredProcedureName;
cm.CommandType=CommandType.StoredProcedure;
return cm;
}
如果只是添加記錄不需要返回記錄集的話,可以用下面的函數(shù)。
//運(yùn)行存儲(chǔ)過程 不返回記錄集,用于添加記錄,或者是通過存儲(chǔ)過程的參數(shù)返回?cái)?shù)據(jù)。
public string runSP(string ParameterName)
{
//cm.Connection=new SqlConnection(cnstr);
cm.CommandType=CommandType.StoredProcedure;
cm.CommandText=ParameterName;
try
{
cm.Connection.Open();
cm.ExecuteNonQuery();
cm.Connection.Close();
return "true";
}
catch(Exception ex)
{
throw ex;
}
finally
{
cm.Connection.Close();
}
}
存儲(chǔ)過程也執(zhí)行完畢了,那如果有output類型的參數(shù),要取回參數(shù)值怎么辦呢,那就寫個(gè)函數(shù)來實(shí)現(xiàn)吧。
//按序號(hào)返回參數(shù)值,一般在執(zhí)行完存儲(chǔ)過程后使用
public string getParameter(int ParameterIndex)
{
return cm.Parameters[ParameterIndex].Value.ToString();
}
//按名稱返回參數(shù)值
public string getParameter(string ParameterName)
{
return cm.Parameters[ParameterName].Value.ToString();
}
聯(lián)系客服