繁体   English   中英

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

[英]How to figure out how to reference a dataSet in a C# portable class library?

我有3个不同的项目,它们在同一dataSet中使用相同的dataTables。

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

我在弄清楚如何为数据集包含引用时遇到麻烦?

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

我希望我有道理!

请以最好的方式指导我。

您需要创建N层架构才能解决您的问题

您的项目架构应该是这样的,

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项目中创建相同的项目

首先让我注意到,伊姆兰的建议是坚定的,您绝对应该考虑采用这种方式。 很明显,这为增长提供了良好的途径。 为此+1!

但是,由于您专门询问了“便携式数据集”,因此我将其翻译为“可重用数据集”,它直接指向OOP 而且由于C#遍历面向对象,因此您可以继续创建自定义DataSet

下面是一个简单示例,将一些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作为一个成员。

  • 创建DB-Access对象和使用3层体系结构 并不是相互排斥的。 实际上,他们在一起做得很好。 只要确保您及时知道备用线的位置即可。

要使示例工作,请执行以下操作:

  • 创建具有必要参考和使用子句的类库项目,然后对其进行编译。
  • 然后在所有项目中引用生成的DLL及其名称空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM