如何使用 C# 从 SQL Express 服务器获取包含所有数据的 DataSet?
谢谢
编辑:为了澄清,我确实想要每个表中的所有数据。这样做的原因是它是一个相对较小的数据库。以前,我一直在使用 DataSet 的功能将所有三个表存储在一个 XML 文件中。但是,我想将其迁移到数据库。
如何使用 C# 从 SQL Express 服务器获取包含所有数据的 DataSet?
谢谢
编辑:为了澄清,我确实想要每个表中的所有数据。这样做的原因是它是一个相对较小的数据库。以前,我一直在使用 DataSet 的功能将所有三个表存储在一个 XML 文件中。但是,我想将其迁移到数据库。
我认为您需要稍微缩小问题范围...所有数据?你的意思是,每个数据库中每个表中的所有数据?好吧,唯一的答案是,很多代码。
要连接到 SQL Server Express 数据库引擎并与之对话,请使用 System.Data.SqlClient 命名空间中的类,即:
您可以通过单击上面的链接查看所有这些类的 MSDN 页面。
以下是一些包含更多信息的概述链接:
请注意,总的来说,您使用 SQL Server Express 数据库引擎的方式与完整的 SQL Server 产品相同,不同之处在于您使用它获得的工具,以及 express 引擎的一些限制。除此之外,您可以只使用用于正常 SQL Server 数据库引擎安装的类和语言。
如果这篇文章没有回答你的问题,请详细说明,你有更高的机会得到你想要的答案。
您可以使用 GetSchema 方法获取数据库中的所有表,然后使用数据适配器填充数据集。像这样的东西(我不知道它是否编译,我只是粘贴一些代码并稍微更改一下):
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
DataTable tables = null;
DataSet database = new DataSet();
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = "Data Source=(local);Initial Catalog=Northwind;Integrated Security=True";
string[] restrictions = new string[4];
// Catalog
restrictions[0] = "Northwind";
// Owner
restrictions[1] = "dbo";
// Table - We want all, so null
restrictions[2] = null;
// Table Type - Only tables and not views
restrictions[3] = "BASE TABLE";
connection.Open();
// Here is my list of tables
tables = connection.GetSchema("Tables", restrictions);
// fill the dataset with the table data
foreach (DataRow table in tables.Rows)
{
string tableName = table["TABLE_NAME"].ToString();
DbDataAdapter adapter = factory.CreateDataAdapter();
DbCommand command = factory.CreateCommand();
command.Connection = connection;
command.CommandType = CommandType.Text;
command.CommandText = "select * from [" + tableName + "]";
adapter.SelectCommand = command;
adapter.Fill(database, tableName);
}
}
编辑:
现在我对其进行了一些重构,现在它可以正常工作了。DbConnection 和 DbProviderFactories 用于数据库引擎抽象,我建议使用它,这样您就可以更改数据库引擎,更改此行和连接字符串:
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OracleClient");
GetSchema 方法会将数据库中的所有表检索到 DataTable,然后我们使用 DataAdapter 将每个表中的所有数据获取到 DataSet。
这可以通过使用dataAdapter类来完成。