(完全限定類名:DataRabbit.Relation.ISPAccesser)
存儲過程不僅可以有傳回值,還可以有[in,out]參數,在對存儲過程的調用進行封裝之前,首先必須抽象存儲過程的參數表示。DataRabbit使用SPParameter來表示存儲過程的參數。
注意,Name屬性表示參數名,該參數名不需要帶字首(如"@"),DataRabbit在調用存儲過程時會依據資料庫的類型自動為其添加合适的參數字首。
我們可以從DataRabbit的入口點IDataAccesser中擷取ISPAccesser引用:
ISPAccesser spAccesser = dataAccesser.GetSPAccesser(null);
ISPAccesser接口中提供了兩個方法以實作對存儲過程的調用,其定義如下:
public interface ISPAccesser : ITransactionAccesser
{
/// <summary>
/// ExcuteNoneQuery 執行指令式的存儲過程,可以輸出out參數。
/// </summary>
/// <param name="spName">存儲過程名稱</param>
/// <param name="parms">所有的[in]和[in,out]參數</param>
/// <param name="outVals">out參數的"名稱-值"字典</param>
void ExcuteNoneQuery(string spName, IList<SPParameter> parms, out IDictionary<string, object> outVals);
/// ExcuteNoneQuery 執行查詢式的存儲過程,可以輸出out參數。
DataSet ExcuteQuery(string spName, IList<SPParameter> parms, out IDictionary<string, object> outVals);
}
代碼的注釋已經很好的解釋了一切,就不再贅言了。
IList<SPParameter> paraList = new List<SPParameter>();
SPParameter para1 = new SPParameter("newDbName", ParameterDirection.Input, "EASNew9");
paraList.Add(para1);
SPParameter para2 = new SPParameter("dbDataDirPath", ParameterDirection.Input, @"C:\Program Files\Microsoft SQL Server\MSSQL\Data\");
paraList.Add(para2);
SPParameter para3 = new SPParameter("soureDbName", ParameterDirection.Input, "AutoSchedulerSystem");
paraList.Add(para3);
SPParameter para4 = new SPParameter("soureBackupFilePATH", ParameterDirection.Input, @"d:\sqlDatabase\AutoSchedulerSystem2");
paraList.Add(para4);
IDictionary<string, object> outParas = null;
spAccesser.ExcuteNoneQuery("CopyDB", paraList, out outParas);