C#从另一个项目添加对类库项目中sqlite.dll的引用

pdkcd3nj  于 2023-03-19  发布在  SQLite
关注(0)|答案(1)|浏览(209)

下面是我用来构建这两个项目ADBTest和DBControl的步骤。
ADBTest是首先构建的,它实现了SQLite DB CRUD函数,我用NuGet添加了System.Data.SQLite。
运行项目一切功能都很棒!
接下来我构建了DBControl,它是一个Windows窗体类库。我将其添加到了ADBTest项目中。
添加了现有项目,并将DBControl的引用添加到了ADBTest。
现在,我尝试在ADBTest中添加对SQLite.dll的引用,我想DBContro.csproj在那里说明了它
这里是我开始迷路。将张贴一些代码和屏幕截图。
我做了各种使用声明,但没有工作,没有发现使用。

那么,我在哪里犯了错误,或者代码设计完全错误了?

也不知道如何从frmStart调用此代码?在后面的一个问题上工作规则糟透了!
DBControl没有表格,所以当它完成与makeFriendsTable将尝试发送回frmStart往返航班,我希望。

public class DBControl : UserControl
{
    public static string dbName = "APeople.db";
    // Class1

    private void UserControl_Load(object sender, EventArgs e)
    {
        makeDB();
        makeFriendsTable();
    }

    private void makeDB()
    {
        throw new NotImplementedException();
    }

    private void makeFriendsTable()
    {
        throw new NotImplementedException();
    }

    public class MakeDB
    {
        public void makeDB()
        {
            using (SQLiteConnection conn = new SQLiteConnection($"Data Source = '{dbName}';Version=3;"))
                if (!File.Exists(dbName))
                {
                    try
                    {
                        conn.Open();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
        }

下面是frmStart调用

private void btnCreateDB_Click(object sender, System.EventArgs e)
    {
        Hide();
        using (var form = new DBControl.DBControl())
        Show();

        //DBControl dB = new DBControl();
        //dB.Show();
    }

在Visual Studio中加入两个项目后放入SQLite后的奇怪部分
首先,NuGet坚持要在两个项目中安装它们
然后创建了DB和Table,但在解决方案资源管理器中找不到DB
在C驱动器上的源文件夹中查找,它位于DBCall调试文件夹中
添加数据后,它显示在解决方案资源管理器中

iibxawm4

iibxawm41#

我认为这可能是一个设计问题。并不像看起来那么简单,即使使用正确的设计也会带来一些问题,所以这个问题对我来说很有用。
一般的工作是分层的,一层是接口,一层是逻辑,一层是数据处理......这就是三层模型。有几种设计可以工作,但这是一种常见的设计。
处理数据的层通常称为Data Layer(DAL),在微服务或SQL服务器中通常称为Data Service(DAS)
这个主题确实很大,但你可以参考下图。当然,你可以从很多不同的Angular 来看待这个模型,但你会发现相同的原理:

我从您的案例中了解到,您有一个DBControl来处理数据工作。因此,这是一个携带对数据库和SQLite.dll的引用的DBControl。顺便说一句,您可以使用Entity Framework与SQLite一起工作,并为存档建立一个支架。
在任何情况下,此DBControl都将携带“存储库”以及您调用数据库的方法(ADO或EF)。这是Persistance,也可以处理Domain Model
这些方法将不返回EF或DB模型,而是返回您自己的模型,这些模型将有助于并在您的“业务逻辑”中工作。这些是DBControl将为其他库或应用程序将工作的接口层export的类、对象、模型等。

由于DBControl将返回您自己的模型,因此该接口不需要SQLite引用,但需要DBControl引用才能获取您在其中工作的模型

图像是一个需要遵循的设计,但不是一个规则。你可以把所有的层放在同一个项目中,每一层都是一个.cs文件,或者在同一个文件中,每一层都是一个方法,诀窍在于组织。也许你没有所有的层,这取决于你的设计。
如果您需要更多的细节在此回答请评论,我很乐意帮助您

相关问题