可執行個人化預存程序的資料訪問層(DAL) (C#實現)

來源:互聯網
上載者:User
        本文意在解釋如何從應用程式層執行單條或者批量的預存程序(主要調用沒有任何結果集返回的儲存儲過程,當然也可以拓展到調用有結果集返回的預存程序).

資料訪問層:
  本層主要包括有下列成員:

  • ParamData 結構
  • StoredProcedure 類
  • StoredProcedureCollection 類
  • Execute 類

其中ParamData 含有預存程序參數的名稱,值,以及各自的資料類型.

 1struct ParamData
 2{
 3public string pName,pValue;
 4public SqlDbType pDataType;
 5public ParamData(string pName,SqlDbType pDataType,string pValue)
 6{
 7this.pName=pName;
 8this.pDataType=pDataType;
 9this.pValue=pValue;
10}
11}
12

StoredProcedure 含有SetParam 和 Getparam兩大方法,他們分別用來設定和擷取預存程序的參數列表的.

public void SetParam(string pName,SqlDbType pDataType,string pValue)
{
ParamData pData=new ParamData(pName,pDataType,pValue);
// adding to array list sParams.
sParams.Add(pData);
}


public ArrayList GetParams()
{
if (!(sParams==null))
{
return sParams;
}
else
{
return null;
}
}

StoredProcedureCollection類 是一個集合類, 它含有多個Stored Procedure以及Add和Remove,Item方法.

public void add(StoredProcedure value)
{
List.Add(value);
}
public void Remove(int index)
{
if (index > Count - 1 || index < 0)
{
Console.WriteLine("No data to remove");
}
else
{
List.RemoveAt(index); 
}
}


public StoredProcedure Item(int Index)
{
return (StoredProcedure) List[Index];
}

Execute 類 包括有一個ExecuteSps 靜態方法,它主要執行來自StoredProcedureCollection類的預存程序

public static bool ExecuteSps(StoredProcedureCollection spCollection,SqlConnection Connection)
{
try
{
foreach(StoredProcedure spData in spCollection)
{
SqlCommand cmd=new SqlCommand();
int i=0;
if (Connection.State!= ConnectionState.Open)
Connection.Open();
cmd.Connection=Connection; cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText=spData.ProcName;
IEnumerator myEnumerator = spData.GetParams().GetEnumerator();
while (myEnumerator.MoveNext())
{
ParamData pData=(ParamData)myEnumerator.Current;
cmd.Parameters.Add(pData.pName,pData.pDataType);
cmd.Parameters[i].Value=pData.pValue;
i=i+1;
}
cmd.ExecuteNonQuery();
}
return true; 
}
catch(Exception exc)
{
return false;
}
}

更多實現細節,見 DataAccessLayer.ZIP
應用程式層:
在應用程式層我們添加對DataAccessLayer.dll的引用後,我們就可以隨意地在需要的地方調用資料層的功能.這樣做的一大優勢就是:我們可以隨著預存程序需求的變化,來添加和刪除任意多的參數.

 1private void button1_Click(object sender, System.EventArgs e)
 2{
 3SqlConnection connection=new SqlConnection();
 4//change this connect string as per your environment
 5string connectString="Persist Security Info=False;Integrated Security=SSPI;database=DB1;server=Server2;Connect Timeout=60";
 6connection.ConnectionString=connectString;
 7if (connection.State!=ConnectionState.Open)
 8connection.Open();
 9DataAccessLayer.StoredProcedureCollection spCollection=new DataAccessLayer.StoredProcedureCollection();
10DataAccessLayer.StoredProcedure spData=new DataAccessLayer.StoredProcedure();
11spData.ProcName=txtSpName.Text;
12spData.SetParam(txtParam1.Text,SqlDbType.VarChar,txtParamValue1.Text);
13spData.SetParam(txtParam2.Text,SqlDbType.VarChar,txtParamValue2.Text);
14spCollection.add(spData);
15if (DataAccessLayer.Execute.ExecuteSps(spCollection,connection))
16MessageBox.Show("Successfully executed");
17} 
18}
19catch(Exception exc)
20{
21return false;
22}
23}

更多實現細節  見 CallingAPP.zip

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.