Использование SqlDataAdapter для вставки строки - PullRequest
21 голосов
/ 27 октября 2009

Я хочу вставить строку в базу данных, используя SqlDataAdapter. У меня есть 2 таблицы (Custormers & Orders) в базе данных CustomerOrders и более тысячи записей. Я хочу создать графический интерфейс (TextBoxes) для добавления новых клиентов и заказов в базу данных в соответствующие таблицы.

  • Как мне это сделать?

Я полагаю, что обычно применяется следующий метод:

dataAdapter = new SqlDataAdapter (sqlQuery, conn);
dataSet = new DataSet();
da.Fill(dataSet);

Теперь возьмите значения из текстовых полей (или используйте DataBinding), чтобы добавить новую строку в dataSet и вызвать

  da.Update(dataSet);

Но вопрос в том, почему я должен извлекать все остальные записи в набор данных с помощью da.Fill (dataSet). Я просто хочу добавить одну новую запись.

Для этого я делаю создание схемы базы данных в наборе данных. как это:

  DataSet customerOrders = new DataSet("CustomerOrders");

  DataTable customers = customerOrders.Tables.Add("Customers");
  DataTable orders = customerOrders.Tables.Add("Orders");

  customers.Columns.Add("CustomerID", Type.GetType("System.Int32"));
  customers.Columns.Add("FirstName", Type.GetType("System.String"));
  customers.Columns.Add("LastName", Type.GetType("System.String"));
  customers.Columns.Add("Phone", Type.GetType("System.String"));
  customers.Columns.Add("Email", Type.GetType("System.String"));

  orders.Columns.Add("CustomerID", Type.GetType("System.Int32"));
  orders.Columns.Add("OrderID", Type.GetType("System.Int32"));
  orders.Columns.Add("OrderAmount", Type.GetType("System.Double"));
  orders.Columns.Add("OrderDate", Type.GetType("System.DateTime"));

  customerOrders.Relations.Add("Cust_Order_Rel", customerOrders.Tables["Customers"].Columns["CustomerID"], customerOrders.Tables["Orders"].Columns["CustomerID"]);   

Я использовал DataBinding для привязки этих столбцов к соответствующим текстовым полям. Теперь я в замешательстве! Что я должен делать дальше? Как использовать команду «Вставить»? Потому что я не давал dataAdapter.SelectCommand, поэтому dataAdapter.Update () не будет работать, я думаю. Пожалуйста, предложите правильный подход.

Ответы [ 3 ]

39 голосов
/ 27 октября 2009

Установите команду выбора с фильтром «0 = 1» и используйте SqlCommandBuilder , чтобы команда вставки автоматически генерировалась для вас.

var sqlQuery = "select * from Customers where 0 = 1";
dataAdapter = new SqlDataAdapter(sqlQuery, conn);
dataSet = new DataSet();
dataAdapter.Fill(dataSet);

var newRow = dataSet.Tables["Customers"].NewRow();
newRow["CustomerID"] = 55;
dataSet.Tables["Customers"].Rows.Add(newRow);

new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(dataSet);
7 голосов
/ 27 октября 2009

Вы можете заполнить dataSet пустым набором, например ::10000

da = new SqlDataAdapter ("SELECT * FROM Customers WHERE id = -1", conn);
dataSet = new DataSet();
da.Fill(dataSet);

Затем вы добавляете свои строки и вызываете update.

Для этого сценария, хотя, вероятно, было бы лучше не использовать SqlDataAdapter. Вместо этого используйте объект SqlCommand непосредственно для вставки. (Еще лучше использовать LINQ to SQL или любой другой ORM)

0 голосов
/ 03 ноября 2012
SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=test;Integrated Security=True");
SqlDataAdapter da=new SqlDataAdapter("Insert Into Employee values("+textBox1.Text+",'"+textBox2.Text+"','"+textBox3.Text+"',"+textBox4.Text+")",con);
DataSet ds = new DataSet();
da.Fill(ds);

Я должен сделать первый раз. Можешь попробовать . Хорошо работает.

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