我有3个不同的项目在同一个数据集中使用相同的dataTable。
我正在尝试创建一个可移植的库,以减少不同项目中的相同代码。
我无法弄清楚如何包含数据集的引用?
目前我的所有3个项目都有自己的数据集,我正在尝试简化它。
我希望我有意义。!
请以最好的方式指导我..
答案 0 :(得分:2)
您需要创建N-Tier架构才能解决您的问题
您的项目架构应该是这样的,
Solution(your project)
|
|- Project 1
|
|- Project 2
|
|- Project 3
|
|- DAL - //Data access layer
|
|- BL - //your business logic will be here
只需要参考你想要使用的地方 e.g。
yourproject.Dal.yourclass.yourmethod()
有关更多信息,请参阅此MVC项目link
您可以在asp.net项目中创建相同的内容
答案 1 :(得分:2)
首先让我注意一下,伊姆兰的建议是可靠的,你一定要考虑这样做;它很清楚,并为增长提供了良好的途径。为此+1!
但是,因为你专门询问了便携式数据集'我将其翻译成“可重复使用的数据集”。 imediatly指向OOP
。而且由于C#是OO,你可以直接创建一个自定义数据集:
以下是在自定义Access
中封装几个DataSet
表的简约示例。
对于其他DBMS,请更改为相应的类!
这个简单的类继承自DataSet
,并使用Connectstring
作为其构造函数中的唯一参数。我存储了两个用户表,并且可以很好地衡量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
。所以,也许你最终会得到一个 myDbStuff ,并将 myDataSet 作为一个成员。
创建数据库访问对象并选择 3层体系结构 不互斥;事实上他们在一起很顺利;只是确保你及时了解到分水线的位置..
要使示例工作执行此操作: