C # - Вставить DataSet в таблицу SQL - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть DataSet, который я заполняю значениями из XML-файла. Я хотел бы вставить значения затем в таблицу SQL. Как мне это сделать?

Вот как я заполняю свой DataSet:

        DataSet dataset = new DataSet();

        dataset.ReadXml(xmlfile);
        customer.DataSource = dataset.Tables[0];

Ответы [ 5 ]

2 голосов
/ 13 апреля 2011

Если все, что вы когда-либо собираетесь сделать, это вставки, то самый простой способ - просто пройти по строкам в DataTable и создать и выполнить DbCommand для каждой строки. Конкретный синтаксис зависит от типа используемой вами базы данных; для SQL Server это может выглядеть так:

string sql = "INSERT INTO T (A, B, C) VALUES (@A, @B, @C)";
using (SqlConnection conn = new SqlConnection(connectionString))
{
   conn.Open();
   foreach (DataRow r in myTable.Rows)
   {
      SqlCommand cmd = conn.CreateCommand();
      cmd.CommandText = sql;
      cmd.Parameters.AddWithValue("@A", r["A"]);
      cmd.Parameters.AddWithValue("@B", r["B"]);
      cmd.Parameters.AddWithValue("@C", r["C"]);
      cmd.ExecuteNonQuery();
   }
}

Это скрывает многие возможные осложняющие факторы, например, обработка исключений, фильтрация строк с неправильным DataRowState, вызов AcceptChanges для DataRow, обновление столбцов идентификаторов значением, назначенным базой данных, и так далее. В ADO.NET есть много чего понять, и это есть причина. Но если все, что вы собираетесь сделать, это вставить строки, и объекты DataColumn в вашем DataTable будут иметь правильные имена и типы и правильные значения для Size и AllowDbNull, и нет никаких отношений внешнего ключа вовлечены, и вы не встретите дубликаты первичных ключей с существующими данными в таблице, приведенное выше должно работать.

0 голосов
/ 13 апреля 2011

Это полностью зависит от существующего уровня доступа к данным.

Если его не существует, я бы больше смотрел на LinqtoSQL, чем на хранимые процедуры, с хранимыми процедурами труднее управлять

0 голосов
/ 13 апреля 2011

Я думаю, вам нужно было бы перебрать набор данных и выполнить вставки.

Очевидно, вы можете сделать это с помощью sproc, и вы просто передадите параметры или с помощью LINQ.

В любом случае должен работать.

0 голосов
/ 13 апреля 2011

Простой,

Просто используйте метод DataSet.ReadXml ().

http://msdn.microsoft.com/en-us/library/system.data.dataset.readxml.aspx

Теперь, если ваш xml отличается от вашей схемы, тогда ваш наиболее вероятныйпридется зациклить и заполнить набор данных для вашей схемы, а затем сохранить при необходимости.

0 голосов
/ 13 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...