下面是我用来构建这两个项目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调试文件夹中
添加数据后,它显示在解决方案资源管理器中
1条答案
按热度按时间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文件,或者在同一个文件中,每一层都是一个方法,诀窍在于组织。也许你没有所有的层,这取决于你的设计。
如果您需要更多的细节在此回答请评论,我很乐意帮助您