Windows 形成多个数据集

Windows Forms Multiple DataSets

美好的一天,

我的项目中有 2 个数据集,除了 1 个用于 SQLite 和 1 个用于 MSSQL 之外,它们是相同的。我正在寻找一种方法,一次只在我的表单中使用其中一个数据集,具体取决于客户希望使用的连接。

例如1个客户端可以选择使用SQLite,而另一个客户端可以选择MSSQL。

在网上搜索时,我只找到更改单个数据集的连接字符串的方法。当然,当我将SQLite Dataset的连接字符串更改为MSSQL连接字符串时,我得到了一个错误。

如何根据客户的选择更改我的应用程序中使用的默认数据集?

老实说,我不知道,我已经搜索了很长时间。

编辑 - 有没有办法更改数据集的数据提供者?这样应该可以更改连接字符串而不会出现错误。

如有任何帮助,我们将不胜感激。 谢谢。

编辑 Connection Strings Screenshot

App.config Connection Strings Screenshot

编辑 2 Error when changing connection string

关于策略模式,我是这样想的。

首先从描述您需要执行的所有数据访问的界面开始,该界面完全与数据库无关:

public interface IDataAccess
{
    DataTable GetPeople();
}

现在您可以实施有关如何获取该数据的具体示例。

public class SQLiteDataAccess : IDataAccess
{
    public SQLiteDataAccess(string connectionString)
    { }

    public DataTable GetPeople()
    {
        var dt = new DataTable();
        dt.Columns.Add("Name");
        dt.Columns.Add("Age");
        dt.Rows.Add("Fred", 40);
        dt.Rows.Add("Barney", 39);
        return dt;
    }
}

public class MSSqlDataAccess : IDataAccess
{
    public MSSqlDataAccess(string connectionString)
    { }

    public DataTable GetPeople()
    {
        var dt = new DataTable();
        dt.Columns.Add("Name");
        dt.Columns.Add("Age");
        dt.Rows.Add("Abbot", 50);
        dt.Rows.Add("Costello", 49);
        return dt;
    }
}

使用数据库没有限制。我可以做一个文件系统版本。

public class FileDataAccess : IDataAccess
{
    private readonly string _fileName;

    public FileDataAccess(string fileName)
    {
        _fileName = fileName;
    }

    public DataTable GetPeople()
    {
        var dt = new DataTable();
        dt.Columns.Add("Name");
        dt.Columns.Add("Age");
        foreach (var line in File.ReadLines(_fileName))
        {
            dt.Rows.Add(line.Split(','));
        }
        return dt;
    }
}

现在您可以对 UI 进行编程以使用您想要的策略:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        IDataAccess da = new SQLiteDataAccess("SQL1");
        //IDataAccess da = new MSSqlDataAccess("MS1");
        //IDataAccess da = new FileDataAccess(@"C:\text.csv");
        dataGridView1.DataSource = da.GetPeople();
    }
}

通过更改这一行,您可以更改应用中数据的来源。