2014-02-17 5 views
1

Я пытаюсь получить информацию из своей таблицы, которая содержит информацию о моих книгах, и сохранить ее в базе данных под названием Заказы, когда вы нажимаете «Добавить в корзину». Но мне трудно понять, как это сделать. Я искал все и пытался все, что мог придумать, поэтому есть что-то, что я не знаю. Можете ли вы, пожалуйста, помочь мне исправить это заявление, чтобы придать ему отмененный эффект?Вставить выбранные значения из одной таблицы в другую

SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price)"+ 
           "SELECT ISBN, Title, Author, Price FROM BooksInfo"+ 
           "WHERE [email protected]", con); 
cmd2.Parameters.AddWithValue("@Id", Id); 
cmd2.ExecuteNonQuery(); 
+0

эй iQue таблицы Заказы и BooksInfo находятся в одной базе данных. правильно? Я спрашиваю, потому что, когда я читал ваши вопросы, это кажется немного неоднозначным. – Christos

+0

Ах, извините. Да, они в одной базе :) –

+0

без проблем ....! – Christos

ответ

1

Попробуйте это:

SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price) "+ 
           "SELECT ISBN, Title, Author, Price "+ 
           "FROM BooksInfo "+ 
           "WHERE [email protected]", con); 
+0

Это дало мне ошибку в 'cmd2.ExecuteNonQuery();', Исключение типа 'System.Data.SqlClient.SqlException' произошло в System.Data.dll, но не обрабатывался в коде пользователя Дополнительная информация: Неправильный синтаксис рядом с ключевым словом «SELECT». –

+0

Извините, iQue. «ЗНАЧЕНИЯ» не нужны. Я удалил его. Пожалуйста, попробуйте это сейчас. – Christos

+0

Ха-ха, не нужно извиняться за попытку помочь. Кажется, что я сделал какую-то ошибку в моих таблицах, так как это дает мне ошибку «Не могу вставить дубликаты ключей в Заказы». Постараюсь выяснить, что вызывает это, и посмотреть, работает ли это :) –

0

В настоящее время в инструкции вставки отсутствует параметр @Id, поэтому параметр ID является избыточным.

Кроме того, чтобы вставить значения, вам понадобится соответствующий оператор Values (@ISBN, @Title, @Author, @Price) с инструкцией Insert. Затем вам также понадобятся параметры, добавленные со значением, аналогично тому, как вы сделали идентификатор.

В соответствии с комментарием ниже, SQL стал бы:

insert into DatabaseA..Orders (ISBN, Title, Author, Price) 
SELECT ISBN, Title, Author, Price from DatabaseB..BooksInfo 
where BooksInfo.ISBN = @Id 

, если вы хотите, чтобы управлять базами данных из C#, то вы можете добавить их в качестве части строки вместо жесткого их кодирования.

+0

Но это должно было бы добавлять значения с использованием переменных, Im ищет способ вставки из одного БД в другой без сохранения значений в переменных, во-первых, должен быть способ, нет? –

+0

В этом случае, если ваши базы данных называются DatabaseA и DatabaseB, вы можете использовать что-то вроде этого: Вставить в DatabaseA..Orders (ISBN, Название, Автор, Цена) SELECT ISBN, Название, Автор, Цена от DatabaseB .. BookInfo –

2

Ну это не выглядит, как вы получили очень далеко, но вам нужно пробелы в конце ваших строк, когда вы конкатенации

      // note addition of space to end of each string fragment 
SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price) "+ 
           "SELECT ISBN, Title, Author, Price FROM BooksInfo "+ 
           "WHERE [email protected]", con); 

В противном случае ваш SQL заявление будет:

INSERT INTO Orders (ISBN, Title, Author, Price)SELECT ISBN, Title, Author, Price FROM BooksInfoWHERE [email protected] 

Который был бы синтаксической ошибкой, поскольку между списком столбцов нет пробела и SELECT.

Некоторые другие вещи, которые я вижу:

  • Нет ли идентификатора OrderID в таблице заказов?
  • Зачем вам титул и автор в таблице Order? В идеале это должны быть иностранные ключи от BooksInfo
  • Не следует ли размещать товары в отдельной таблице? (Что, если кто-то заказывает две книги?)
+0

Элементы заказа находятся в отдельной таблице? поэтому Im пытается вставить infro о упорядоченной книге в эту таблицу. –

+0

@iQue Обычно у вас есть таблица 'Order', которая содержит данные о самом заказе (дата, статус, адрес и т. д.) и таблицу _separate_, которая содержит фактические элементы в каждом порядке. –

+0

А, я вижу вашу мысль. И это имеет смысл, но в настоящее время я просто следую заказам от assignmemt :) –

0

Почему бы не разделить эту задачу на две различные задачи 1. значения Выбор из одной базы данных и поместить их в какой-то объект orderCart; 2. вставляя или обновление значений в другой базе данных со значениями orderCart Во-первых - это более легко отлаживать и понимать код в этом случае

0

это о конкатенации.

SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price)"+ 
           "SELECT ISBN, Title, Author, Price FROM BooksInfo"+ 
           "WHERE [email protected]", con); 

SqlCommand будет производить

INSERT INTO Orders (ISBN, Title, Author, Price)SELECT ISBN, Title, Author, Price FROM BooksInfoWHERE [email protected] 

вместо

INSERT INTO Orders (ISBN, Title, Author, Price) 
SELECT ISBN, Title, Author, Price FROM BooksInfo 
WHERE [email protected] 

вы можете добавить пробел или разрыв строки после цены) и BooksInfo

Смежные вопросы