簡體   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