Подтвердить что ты не робот

Использование SqlDataAdapter для вставки строки

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

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

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

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

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

  da.Update(dataSet);

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

Для этой цели я делаю это, создавая схему базы данных в 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 для привязки этих столбцов к соответствующим текстовым полям. Теперь я в замешательстве! Что я должен делать дальше? Как использовать команду Insert? Потому что я не дал никаких dataAdapter.SelectCommand, поэтому dataAdapter.Update() не работает, я думаю. Пожалуйста, предложите правильный подход.

4b9b3361

Ответ 1

Установите команду select с фильтром "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);

Ответ 2

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

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

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

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

Ответ 3

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);

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