2013-05-06 4 views
0

Я пытаюсь выполнить самую простую реализацию вставки в моем проекте для обучения и показать ее моим будущим работодателям. Я знаю, что я должен поместить его на другой уровень и назвать его и т. Д., Но я честно не имею достаточно времени, и мне нужно научиться делать это легко.Выбор значения из одной таблицы для вставки идентификатора строки в другую в asp.net

У меня уже есть имя «@username», хранящееся в SESSION ["USER"], теперь мне нужно вставить в таблицу. ЗАКАЗЫВАЕТ сумму и идентификатор продукта, вещь - это имя продукта в таблице ПРОДУКТ.

У меня есть имена продуктов в выпадающем списке, поэтому ПОЛЬЗОВАТЕЛЬ выбирает значение, набирает сумму, а затем нажимает кнопку «Купить» и сохраняет ЗАКАЗ в базе данных.

Каков правильный способ запроса этой команды SQL? Я думал, что SqlCommand будет делать трюк, но я все еще не совсем уверен, как это выразить.

Пример из базы данных:

CREATE TABLE ORDERS 
(
_OrderID int not null identity (1,1) primary key, 
_Date datetime null, 
_Quantity bigint null, 
_ProdID int foreign key references PRODUCTS (_ProductID), 
_UserID int foreign key references USERS (_UserID) 
) 
GO 


CREATE TABLE PRODUCTS 
(
_ProductID int not null identity(1,1) primary key, 
_ProdName nchar (200) null, 
_StockUnits int, 
_SuppID int foreign key references SUPPLIERS (_SuppID) 
) 
GO 

CREATE TABLE USERS 
(
_UserID int not null identity(1,1) primary key, 
_UserEmail varchar (35) null, 
_UserName varchar (30) not null, 
_UserPass varchar (30) not null, 
_Name varchar (100), 
_Phone varchar (20) null, 
_Address varchar (150) null, 
_Authority int not null, 
_Special bit null 
) 
GO 

protected void btnBuy_Click(object sender, EventArgs e) 
     { 
      //obviously incomplete. 
      string usrQuery = Session["NOMUSU"].ToString(); 
      SqlConnection oConnection = new SqlConnection("Server=.\\SQLExpress;AttachDbFilename=L:\\Apps\\VS Projects\\Carnisoftix\\CarniDb.mdf;Database=CarniDb;Trusted_Connection=Yes;"); 
      SqlCommand oCom = new SqlCommand("INSERT INTO ORDERS _Date, _Quantity VALUES " + " (" + DateTime.Now.ToString("yyyy-mm-dd HH:mm:ss") + ", "+ txtAmount.Text 
     } 

PD: Должен ли я сделать хранимую процедуру для этой простой задачи?

ответ

1

Ключ к вашим проблемам в этом заявлении твои:

У меня есть имена продукта в выпадающем списке уже

Когда вы строите этот выпадающий список можно добавить Id продуктов и использовать его в качестве значения в выпадающем списке таким образом, что вы будете иметь что-то вроде этого:

<select> 
    <option value="1">Apple</option> 
    <option value="2">Banana</option> 
    <option value="3">Orange</option> 
</select> 

Тогда вы передаете/получаете т значение шляпы в вашем кодовом замке, аналогично тому, как вы получаете значение суммы от txtAmount. Таким образом, вам не нужно запрашивать таблицу продуктов по имени, чтобы получить _ProductID, чтобы вы могли вставить ее в таблицу ORDERS.

+1

Это действительно хорошая идея! – octohedron

+0

Да, и вы, возможно, захотите исправить этот sql, который у вас есть. Либо вы используете хранимую процедуру, либо если вы ее не любите, по крайней мере параметризуйте этот запрос, например: 'INSERT INTO ORDERS (_Date) VALUES (@date)'. [См. Этот простой для понимания пример] (http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html) –

+0

Хорошо, что им, им делая это простым тупым способом: некоторое время проходит через список, упорядоченный идентификатором продукта, и когда его значение == до выбранного значения перестает добавлять к переменной int, а затем я использую это для хранения идентификатора продукта в базе данных. благодарит вас. – octohedron