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