Как получить несколько столбцов из двух таблиц в C #, используя SQL? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть две таблицы, и мне нужно извлечь несколько столбцов из обеих таблиц на основе общего ключа ProductID.Я попробовал следующее, но получил ошибку «Неверный синтаксис рядом с ключевым словом« JOIN »»

string selectProductStatement = 
"SELECT Products.Code, Products.Description,"+
"Products.Category, Products.Price, BookProducts.Author"+
"FROM Products"+
"INNER JOIN BookProducts ON (Products.@ProductID = BookProducts.ProductID)";

SqlCommand comm = new SqlCommand(selectProductStatement, connection);
comm.Parameters.AddWithValue("@productID", productID);

Таблицы:

Продукты

  ProductID
  Code
  Description
  Category
  Price

BookProducts

  BookID PK
  ProductID FK
  Author

Ответы [ 7 ]

4 голосов
/ 23 февраля 2012

В вашем SQL отсутствуют пробелы:

string selectProductStatement = 
    "SELECT Products.Code, Products.Description,"+
    "Products.Category, Products.Price, BookProducts.Author"+
    " FROM Products"+
    " INNER JOIN BookProducts ON (Products.@ProductID = BookProducts.ProductID)";
3 голосов
/ 23 февраля 2012

Лично мне нравится использовать буквальную строку для команд SQL, чтобы избавиться от всей конкатенации вместе. Экономит время и головные боли!

обратите внимание на символ @ перед определением строки. Кроме того, завертывание команд в фигурную скобку «с помощью» означает, что вы не можете забыть избавиться от них.

 string selectProductStatement = @"           SELECT 
                                              Products.Code, 
                                              Products.Description,
                                              Products.Category, 
                                              Products.Price, 
                                              BookProducts.Author
                                              FROM Products
                                              INNER JOIN BookProducts 
                                              ON (Products.@ProductID = BookProducts.ProductID) ";
            string connectionString = string.Empty;

            using (SqlConnection sqlConnection = new SqlConnection(connectionString))
            {
                sqlConnection.Open();

                using (SqlCommand sqlCommand = new SqlCommand(selectProductStatement, sqlConnection))
                {
                    sqlCommand.Parameters.AddWithValue("@productID", productID);

                    //Etc
                }
            }
3 голосов
/ 23 февраля 2012

Между продуктами и внутренним пространством нет места.Добавьте пробел до и после FROM Products в 3-й строке запроса, и все будет в порядке: -)

2 голосов
/ 23 февраля 2012

Определение строки как строкового литерала может помочь с ошибочным интервалом:

string selectProductStatement = 
 @"SELECT Products.Code, Products.Description, 
Products.Category, Products.Price,
 BookProducts.Author FROM Products 
INNER JOIN BookProducts ON (Products.@ProductID =
BookProducts.ProductID)";

Это исключает необходимость - и связанные проблемы / читаемость нескольких фрагментов строки

2 голосов
/ 23 февраля 2012

Попробуйте следующее

string selectProductStatement = 
"SELECT Products.Code, Products.Description,"+
"Products.Category, Products.Price, BookProducts.Author"+
" FROM Products "+
"INNER JOIN BookProducts ON (Products.ProductID = BookProducts.ProductID) WHERE Products.ProductId = @productID";
2 голосов
/ 23 февраля 2012

Считай, что тебе просто нужно расстояние между "ПРОДУКТАМИ" и "ВНУТРЕННИМ", т. Е.

"FROM Products "+
"INNER JOIN BookProducts ON (Products.@ProductID = BookProducts.ProductID)";
0 голосов
/ 23 февраля 2012
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name;

Выше приведен общий синтаксис для запроса внутреннего соединения. Просто следуйте соответственно. :)

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