Вопрос о добавлении в базу данных из текста, введенного в текстовое поле - PullRequest
0 голосов
/ 08 июня 2011

У меня есть приложение, которое отображает данные из базы данных sql в сетке данных.Я добавляю функцию, которая позволит пользователю добавить новый элемент в эту сетку данных.У меня будет кнопка «Добавить» в приложении, при нажатии на которую откроется новое окно, в которое будет добавлена ​​вся информация.После того, как пользователь вводит информацию в текстовые поля и нажимает кнопку Сохранить, эта информация сохраняется в базе данных.Это потребует вставки данных в две отдельные таблицы, которые связаны между собой.Первая таблица - это ItemDescriptor, а другая таблица - «Аксессуары».Идентификатор ItemDescriptor должен быть помещен в таблицу «Аксессуары» как ItemDescriptorID.Я попытался сделать два отдельных запроса на вставку, но не могу понять, как программно получить идентификатор из ItemDescriptor в таблицу «Аксессуары».Извините, я знаю, это может немного сбить с толку.Дайте мне знать, если нужно больше информации.Спасибо

_dbAccess.ExecuteNonQuery("INSERT INTO ItemDescriptor (id, Model, Brand, DeviceName, Type, Notes) VALUES ('" + System.Guid.NewGuid() + "', '" + tbModel.Text + "', '" + tbBrand.Text + "', '" + tbDeviceName.Text + '", '" + cmbType.SelectedValue + "', '" + tbNotes.Text + "')");

_dbAccess.ExecuteNonQuery("INSERT INTO Accessories (id, ItemDescriptorID, StorageRoomCount, OnHandCount, HiBayCount) VALUES ('" + System.Guid.NewGuid() + "', '" +  

, вот и все, что я получил ... не знаю, как получить ItemDescriptorID там из первого запроса.

Ответы [ 4 ]

2 голосов
/ 08 июня 2011

Во-первых, пожалуйста, используйте параметризованные запросы при работе с пользовательским вводом.Это средство конкатенации строк просто запрашивает атаку SQL-инъекцией.

Во-вторых, если вы используете SQL Server, вы можете использовать что-то вроде @@IDENTITY, чтобы получить поле идентификациипосле вставки.Во всех системах есть что-то сопоставимое, поэтому, если вы сообщите нам, что вы используете, мы можем указать вам правильное направление.

1 голос
/ 08 июня 2011

Я предполагаю, что вы используете SQL Server и ItemDescriptor.id является столбцом идентификаторов;правильно?

Если вы выполните следующую команду сразу после вашего начального оператора вставки, она вернет значение последнего сгенерированного идентификатора:

var newID = _dbAccess.ExecuteScalar("SELECT Scope_Identity()");

Вы можете использовать newID для создания второгооператор вставки.

Одно предупреждение: оператор SELECT Scope_Identity () должен выполняться на том же экземпляре соединения, что и первоначальный оператор вставки.Поэтому убедитесь, что вы не закрываете и не открываете связь между утверждениями.Если это кажется проблемой, вы можете объединить операторы вставки и выбора в одну команду;Например:

var newID = _dbAccess.ExecuteScalar("INSERT [all your code here]; SELECT Scope_Identity();");

Удачи!

0 голосов
/ 09 июня 2011

Я нашел способ заставить его работать. Я просто сделал guid объектом, а затем использовал его как переменную, и это сработало. спасибо за все предложения.

Guid guid = System.Guid.NewGuid();

if (_dbaccess != null)
{
_dbAccess.ExecuteNonQuery("INSERT INTO ItemDescriptor (id, Model, Brand, DeviceName, Type, Notes) VALUES ('" + guid + "', '" + tbModel.Text + "', '" + tbBrand.Text + "', '" + tbDeviceName.Text + '", '" + cmbType.SelectedValue + "', '" + tbNotes.Text + "')");

_dbAccess.ExecuteNonQuery("INSERT INTO Accessories (id, ItemDescriptorID, StorageRoomCount, OnHandCount, HiBayCount) VALUES ('" + System.Guid.NewGuid() + "', '" + guid + "', '" + tbStorageRoom.Text + "', '" + tbOnHand.Text + "', '" + tbHiBay.Text + "')"); 
}
0 голосов
/ 08 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...