【问题标题】:how to retrieve multiple columns from two tables in C#, using SQL?如何使用 SQL 从 C# 中的两个表中检索多个列?
【发布时间】:2012-02-23 16:52:53
【问题描述】:

我有两个表,需要根据 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

图书产品

  BookID PK
  ProductID FK
  Author

【问题讨论】:

  • 你缺少一些空格......在BookProducts.AuthorFROM Products之后

标签: c# sql


【解决方案1】:

您的 SQL 中缺少空格:

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

【讨论】:

    【解决方案2】:

    就我个人而言,我喜欢对 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】:

      Products 和 INNER 之间没有空格。在查询的第 3 行的 FROM Products 之前和之后添加一个空格,你会没事的 :-)

      【讨论】:

        【解决方案4】:

        估计你只需要在“PRODUCTS”和“INNER”之间留一个空格就可以了,即

        "FROM Products "+
        "INNER JOIN BookProducts ON (Products.@ProductID = BookProducts.ProductID)";
        

        【讨论】:

          【解决方案5】:

          将字符串定义为字符串文字可以帮助解决错误的间距:

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

          它省略了多个字符串片段的需求和相关问题/可读性

          【讨论】:

            【解决方案6】:

            试试下面的

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

            【讨论】:

              【解决方案7】:
              SELECT column_name(s)
              FROM table_name1
              INNER JOIN table_name2
              ON table_name1.column_name=table_name2.column_name;
              

              以上是内连接查询的一般语法。只需相应地遵循即可。 :)

              【讨论】:

              • 问题语法正确,但缺少空格。
              猜你喜欢
              • 2014-11-18
              • 2018-03-06
              • 1970-01-01
              • 2020-04-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-18
              • 1970-01-01
              相关资源
              最近更新 更多