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