我需要在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);
}
答案 0 :(得分:4)
答案 1 :(得分:3)
您无法在单个SQL语句中插入多个表。您必须将其分解为两个单独的查询 - 从
开始INSERT INTO products (name) OUTPUT INSERTED.ID VALUES @nameOfProduc
并使用
检索IDint 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...
- 你确实遇到了一些问题。
insert into
需要select
而不是values
。您实际上不能一次将值插入两个表中(您可以使用触发器,但不是完全相同的事情)
这样的事情应该有效:
INSERT INTO auctions (productId, bidValue)
select p.Id,
@valueOfBid1
FROM products p
where name = @nameOfProduc
请注意,这取决于“产品名称”是否唯一。此外,您应该只在将新产品添加到库存(或其他)时插入“产品” - 每个出价都不应创建新产品。
上述声明将成功在auctions
表格中插入产品名称的出价,但这取决于已存在的product
。