C# 具有插入和内部联接查询的ASP.NET项目
我需要在ASP.NET中创建一个项目,在其他功能中,该项目将能够同时向两个表添加新数据C# 具有插入和内部联接查询的ASP.NET项目,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,我需要在ASP.NET中创建一个项目,在其他功能中,该项目将能够同时向两个表添加新数据 一个表名为“products”,列“name”和“id”为PK 另一个名为“拍卖”,列为“bidValue”和 “productId” 如果有人能告诉我我在这段代码中做错了什么。当我单击按钮时,会显示一个错误页面,其中包含以下文本: “,”附近的语法不正确 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源 异常详细信息:System.Data.
- 一个表名为“products”,列“name”和“id”为PK
- 另一个名为“拍卖”,列为“bidValue”和 “productId”
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);
}
不能在一条SQL语句中插入多个表。您必须将其分解为两个单独的查询-从
INSERT INTO products (name) OUTPUT INSERTED.ID VALUES @nameOfProduc
并使用
int productID = (Int32)command.ExecuteScalar();
然后,在其他查询中使用此ID:
INSERT INTO auctions (productID, bidValue) VALUES (@productID, @valueOfBid1)
另外,我也不清楚为什么每次投标时都要在
产品
表中添加一条新记录。从products表中检索产品id,然后只在拍卖
表中插入一条新记录更有意义。这看起来像是插入到拍卖(productId,bidValue)值中…
看起来您正在尝试将插入到选择中…
-您确实有一些问题
insert-into
和from表一起需要select
而不是value
。实际上不能同时将值插入两个表中(可以使用触发器,但不能完全相同)
像这样的方法应该会奏效:
INSERT INTO auctions (productId, bidValue)
select p.Id,
@valueOfBid1
FROM products p
where name = @nameOfProduc
注:这取决于“产品名称”的唯一性。此外,您应该仅在将新产品添加到库存(或其他)时插入“产品”-每个投标不应创建新产品
上述语句将成功地在
拍卖
表中插入产品名称的出价,但它取决于已存在的产品。T-SQL不允许在同一语句中插入两个表
如果要以原子方式插入两个表,可以在事务中插入
这个问题得到了回答。每次单击按钮,我都需要将新的拍卖数据插入表中,以确定新产品的名称和价值。关于单个SQL语句的初学者错误。所以,我需要进行两个查询和两个sqlCommand?它再次显示了错误,因为列不允许null,所以我在表中更改了它,现在工作了。非常感谢。
INSERT INTO auctions (productId, bidValue)
select p.Id,
@valueOfBid1
FROM products p
where name = @nameOfProduc