The Stars ...My Destination

adamxx

天下事,法无定法,然后知非法法之
世间人,尤了未了,何妨以不了了之

导航


System.Reflection.Emit 来自动生成调用存储过程的实现

转贴,原文地址忘了

  
//使用的例子
namespace Lostinet.Sample
{
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

//定义一个接口,用于定义存储过程

interface INorthwindStoredProcedures
{
//定义存储过程对应的方法

DataSet CustOrderHist(
string CustomerID);

//如果储存过程名字和方法名字不同,应该用SqlAccessAttribute来进行说明
[SqlAccess("Employee Sales By Country")]
DataTable EmployeeSalesByCountry(DateTime Beginning_Date,DateTime Ending_Date);

//...more...

//MORE Ideas..

//直接执行SQL语句?
//[SqlAccess(SqlAccessType.SqlQuery,"SELECT * FROM Employees WHERE EmployeeID=@EmpId")]
//DataTable SelectEmployee(int EmpId);
}


class ConsoleApplication
{
[STAThread]
static void Main(string[] args)
{
using(SqlConnection conn=new SqlConnection("server=(local);trusted_connection=true;database=northwind"))
{
//一句话就把实现创建了!
//需要传如 SqlConnection 和 SqlTransaction
//SqlTransaction可以为null

//这个好就好在,只要能得到SqlConnection/SqlTransaction就能用这个方法了,所以兼容 Lostinet.Data.SqlScope
INorthwindStoredProcedures nsp=(INorthwindStoredProcedures)
StoredProcedure.CreateStoredProcedureInterface(
typeof(INorthwindStoredProcedures),conn,null);

//调用储存过程并且显示

ShowData(
"CustOrderHist ALFKI",nsp.CustOrderHist("ALFKI"));

ShowData(
"Employee Sales By Country",nsp.EmployeeSalesByCountry(new DateTime(1998,1,1),new DateTime(1999,1,1)));

}

}


static void ShowData(string title,object data)
{
Form f
=new Form();
f.Width
=600;
f.Height
=480;
f.Text
=title;

DataGrid grid
=new DataGrid(); 
grid.Dock
=DockStyle.Fill;
grid.DataSource
=data;

f.Controls.Add(grid);
f.ShowDialog();
}


}

}


//实现方法(不完整)