如何弄清楚如何在C#可移植类库中引用dataSet?

时间:2014-06-05 05:54:06

标签: c# architecture dataset reusability

我有3个不同的项目在同一个数据集中使用相同的dataTable。

我正在尝试创建一个可移植的库,以减少不同项目中的相同代码。

我无法弄清楚如何包含数据集的引用?

目前我的所有3个项目都有自己的数据集,我正在尝试简化它。

我希望我有意义。!

请以最好的方式指导我..

2 个答案:

答案 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层体系结构 互斥;事实上他们在一起很顺利;只是确保你及时了解到分水线的位置..

要使示例工作执行此操作:

  • 使用必要的refences创建一个类库项目并使用子句并编译它。
  • 然后在所有项目中引用生成的DLL及其命名空间。