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();
}
}
通过更改这一行,您可以更改应用中数据的来源。
美好的一天,
我的项目中有 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();
}
}
通过更改这一行,您可以更改应用中数据的来源。