如何在c#可移植类库中引用dataSet
本文关键字:引用 dataSet 类库 可移植 | 更新日期: 2023-09-27 18:07:01
我有3个不同的项目,在同一个数据集中使用相同的数据表。
我正在尝试创建一个可移植库,以减少跨不同项目的相同代码。
我有麻烦弄清楚如何包括对数据集的引用?
目前我的所有3个项目都有自己的数据集,我正在努力简化它。
我希望我说的有意义。
请用最好的方式引导我…
你需要创建N-Tier架构来解决你的问题
您的项目架构应该是这样的,
Solution(your project)
|
|- Project 1
|
|- Project 2
|
|- Project 3
|
|- DAL - //Data access layer
|
|- BL - //your business logic will be here
,只需要在你想使用的地方引用例如
yourproject.Dal.yourclass.yourmethod()
更多信息请参考MVC项目链接
您可以在您的asp.net项目中创建相同的
首先让我指出,Imran的建议是可靠的,你绝对应该考虑这样做;这是明确的,并提供了一个良好的增长路径。这个加1 !
但是既然你特别问了一个"便携式数据集",我把它翻译成"可重用数据集",它立即指向OOP
。因为c#是面向对象的,你可以直接创建一个自定义数据集:
下面是一个简单的例子,将几个Access
表封装在一个自定义DataSet
中。对于其他dbms,请更改为适当的类!
这个简单的类继承自DataSet
,并使用Connectstring
作为其构造函数中的唯一参数。I存储两个用户表和usertables
模式。
显然你会想要大大扩展这个…
public class myDataSet : DataSet
{
OleDbConnection conn;
OleDbDataAdapter DBDA;
OleDbCommand SqlCmd;
string ConnectionString = @"your default connection string here!";
public myDataSet (string connectString)
{
conn = new OleDbConnection();
if (String.IsNullOrEmpty(connectString))
conn.ConnectionString = ConnectionString;
else conn.ConnectionString = connectString;
connectMe();
DataTable userTables = conn.GetSchema("Tables");
SqlCmd = new OleDbCommand("select * from [Names]", conn);
DBDA = new OleDbDataAdapter(SqlCmd);
DataTable Names = new DataTable("Names");
DBDA.Fill(Names);
SqlCmd = new OleDbCommand("select * from [Places]", conn);
DBDA = new OleDbDataAdapter(SqlCmd);
DataTable Places= new DataTable("Places");
DBDA.Fill(Places);
conn.Close();
this.Tables.Add(userTables);
this.Tables.Add(Names);
this.Tables.Add(Places);
}
public bool connectMe()
{
try { conn.Open(); }
catch { /* your error hanfdilng here! */}
if (conn.State == ConnectionState.Open) return true;
return false;
}
}
因为它是一个常规类,你可以添加属性和方法,因为你喜欢;用于重新检索以及更新等。像往常一样,类设计是一门艺术,需要一些考虑以及反复的改进。你当前的需求是一个很好的起点,但是为增长做计划是值得的。
还有两个注释:
直接从DataSet继承是一种简单的方法。通常最好从各种其他类中创建一个类,即
composited
。所以也许你最终会用一个Class myDbStuff和一个myDataSet作为一个成员。创建DB-Access对象和采用三层架构不是互斥的;事实上,它们搭配得很好;只要确保你及时知道分隔行应该放在哪里…
要使示例正常工作,请这样做:
- 创建一个类库项目,包含必要的引用和使用子句,并编译它。
- 然后在你所有的项目中引用生成的DLL和它的命名空间。