Получение DataSet из SQL Express Server C # - PullRequest
0 голосов
/ 21 декабря 2008

Как я могу получить DataSet со всеми данными с сервера SQL Express, используя C #?

Спасибо

edit: Чтобы уточнить, я хочу получить все данные из каждой таблицы. Причина этого в том, что это относительно небольшая база данных. Ранее я сохранял все три таблицы в XML-файле, используя возможности DataSet. Однако я хочу перенести его в базу данных.

Ответы [ 3 ]

2 голосов
/ 21 декабря 2008

Вы можете использовать метод 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, а затем мы получаем все данные из каждой таблицы в DataSet, используя DataAdapter.

2 голосов
/ 21 декабря 2008

Я думаю, вам нужно несколько сузить вопрос ... Все данные? Вы имеете в виду, все данные в каждой таблице в каждой базе данных? Ну, единственный ответ на это: много кода .

Чтобы подключиться и взаимодействовать с ядром базы данных SQL Server Express, используйте классы в пространстве имен System.Data.SqlClient, а именно:

  • SqlConnection : подключение к базе данных
  • SqlCommand : обращение к базе данных
  • SqlDataReader : перебирать данные, извлеченные из базы данных

Вы можете проверить страницы MSDN для всех этих классов, перейдя по ссылкам выше.

Вот несколько обзорных ссылок с дополнительной информацией:

Обратите внимание, что в целом вы используете ядро ​​базы данных SQL Server Express так же, как и полноценный продукт SQL Server, разница заключается в том, какие инструменты вы получаете вместе с ним, и некоторые ограничения в ядре Express. Кроме этого, вы можете просто использовать классы и язык, которые вы использовали бы для обычной установки ядра базы данных SQL Server.

Если этот пост не ответил на ваш вопрос, уточните, и у вас больше шансов получить ответ, который вы ищете.

0 голосов
/ 21 декабря 2008

Это можно сделать с помощью dataAdapter class.

...