【发布时间】:2020-11-15 21:00:25
【问题描述】:
我计划扩展我的应用程序。目前,我有 Data.dll,它使用使用 SQL Server 和存储过程的数据访问。我要做的是使其灵活,更改 DLL 会将数据访问更改为 MySQL 或 Oracle 等任何提供程序。目标是避免对主应用程序进行更改。我只是不确定在 C# 中实现这一点的最佳方法是什么。目前,我使用的是 win32,但想在我的其他 ASP.NET Core API 上使用相同的概念。我打算为 Win32 使用 App.config 或为 WebApi 使用 Web.config 来更改配置。
-----更新以使其更清晰---------
我刚刚创建了 3 个项目 项目# 1 - 将在 SQL Server 上执行 CRUD 并生成名为 DLLClassLibrary.dll 的文件的 DLL
public class Data
{
public string GetName()
{
return "NAME DLL SQL SERVER";
}
}
Project# 2 - 一个 DLL,它将在 MySQL 上执行 CRUD 并生成一个名为 DLLClassLibrary.dll 的文件
public class Data
{
public string GetName()
{
return "NAME DLL MYSQL";
}
}
Project# 3 - 我将使用 DLL 的主要应用程序。在程序中,我创建了一个对名为 DLLClassLibrary.dll 的文件的引用。
public partial class frmMain : Form
{
DLLClassLibrary.Data data = new DLLClassLibrary.Data();
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
txtOut.Text = data.GetName();
}
}
使用项目 #1 生成的 DLL 完成测试
使用项目 #2 生成的 DLL 完成测试
您可以通过放置相同的 dll 文件看到行为发生了变化。问题是实现这 2 个 DLL 的最佳方法是什么,无需相互删除,也无需在我的 Main 上对其进行硬编码。或者这是唯一的选择?
【问题讨论】:
-
你到底在问什么?您没有明确的问题,对于本网站来说不是太宽泛。
-
我想知道是否有实现 DLL 的简单方法。只是用相同的函数签名替换 DLL 的问题吗?或者有什么我需要注意的吗?
-
所以您想在 win32 应用程序(可能是桌面/服务应用程序)和 .Net 核心网络应用程序之间共享您的数据访问项目 (dll)?并且您希望您的数据访问层能够处理 mysql 和 oracle 等不同的提供程序?
-
考虑针对 ADO.NET IDb* 接口进行编程并使用工厂模式来创建特定于提供程序的对象。
-
但是,您不应该使用仅在 MySQL 或 ORACLE 或 MSSQL 中工作的特定函数,例如
STRING_AGG、GROUP_CONCAT、LISTAGG(分别为 MSSQL、MySQL、甲骨文)
标签: c# mysql sql-server ado.net