使用INSERT和INNER JOIN查询的ASP.NET项目

时间:2015-08-06 17:29:12

标签: c# sql asp.net sql-server

我需要在ASP.NET中创建一个项目,除了其他函数之外,它还能够同时向两个表添加新数据。

  • 一个表名为'产品'用列'名称'并且' id'作为PK

  • 另一个名为'拍卖'列" bidValue'和 '的productId'

如果有人能告诉我在这段代码中我做错了什么。当我单击按钮时,它会显示一个包含此文本的错误页面:

  

','附近的语法不正确。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.Data.SqlClient.SqlException:','附近的语法不正确。

     

来源错误:

Line 86: comm.Parameters.AddWithValue("@valueOfBid1",  valueOfBid);
Line 87: 
Line 88:                     ***comm.ExecuteNonQuery();***
Line 89:                 }
Line 90:             }

这是我的代码:

 public void makeBid(string nameOfProduct, int valueOfBid)
    {
        string query = @"INSERT INTO products.name, auctions.bidValue VALUES @nameOfProduc,
                       @valueOfBid1
                       FROM products 
                       INNER JOIN auctions ON products.id = auctions.productId";
        using (SqlConnection conn = DbBroker.conn())
        {
            using (SqlCommand comm = new SqlCommand(query, conn))
            {
                comm.Parameters.AddWithValue("@nameOfProduc", nameOfProduct);
                comm.Parameters.AddWithValue("@valueOfBid1", valueOfBid);

                comm.ExecuteNonQuery();
            }
        }

    }

 protected void Button1_Click(object sender, EventArgs e)
    {
        Auction1 newBid = new Auction1();
        string productName = TextBox1.Text.Trim().ToString();
        string lbItem = ListBox1.SelectedValue;
        int bidValue = Int32.Parse(lbItem);
        newBid.makeBid(productName, bidValue);
    }

3 个答案:

答案 0 :(得分:4)

T-SQL不允许在同一语句中插入2个表。

如果要以原子方式插入两个表,可以在事务中执行。

该问题已经回答here

答案 1 :(得分:3)

您无法在单个SQL语句中插入多个表。您必须将其分解为两个单独的查询 - 从

开始
INSERT INTO products (name) OUTPUT INSERTED.ID VALUES @nameOfProduc

并使用

检索ID
int productID = (Int32)command.ExecuteScalar();

然后,在其他查询中使用此ID:

INSERT INTO auctions (productID, bidValue) VALUES (@productID, @valueOfBid1)

另外,我不清楚为什么要在每个出价的products表格中添加新记录。从products表中检索产品ID更有意义,然后只在auctions表中插入新记录。这看起来像INSERT INTO auctions(productId, bidValue) VALUES ...

答案 2 :(得分:0)

看起来你正试图做insert into select... - 你确实遇到了一些问题。

带有from表的

insert into需要select而不是values。您实际上不能一次将值插入两个表中(您可以使用触发器,但不是完全相同的事情)

这样的事情应该有效:

INSERT INTO auctions (productId, bidValue)
select p.Id,
       @valueOfBid1
FROM products p
where name = @nameOfProduc

请注意,这取决于“产品名称”是否唯一。此外,您应该只在将新产品添加到库存(或其他)时插入“产品” - 每个出价都不应创建新产品。

上述声明将成功在auctions表格中插入产品名称的出价,但这取决于已存在的product