通过分别对更新表使用这两个查询,我只能更新PO表。当我尝试更新PO_Cart表(与datagridview相关)时,它说我无法更新标识列。我现在可以做什么来解决这个问题< / p>
public void UpdatePurchseOrderTable(int PO_No,int Supplier_ID, string Date, string RequiredDate, decimal GrandTotal)
{
DynamicConnection con = new DynamicConnection();
con.mysqlconnection();
string query = "UPDATE TBL_PO "
+ " SET Supplier_ID = @Supplier_ID,Date = @Date,"
+ "RequiredDate = @RequiredDate,GrandTotal=@GrandTotal"
+ " WHERE PO_No = @PO_No";
con.sqlquery(query);
con.cmd.Parameters.Add(new SqlParameter("@PO_No", SqlDbType.Int));
con.cmd.Parameters["@PO_No"].Value = PO_No;
con.cmd.Parameters.Add(new SqlParameter("@Supplier_ID", SqlDbType.Int));
con.cmd.Parameters["@Supplier_ID"].Value = Supplier_ID;
con.cmd.Parameters.Add(new SqlParameter("@Date", SqlDbType.Date));
con.cmd.Parameters["@Date"].Value = Date;
con.cmd.Parameters.Add(new SqlParameter("@RequiredDate", SqlDbType.Date));
con.cmd.Parameters["@RequiredDate"].Value = RequiredDate;
con.cmd.Parameters.Add(new SqlParameter("@GrandTotal", SqlDbType.Money));
con.cmd.Parameters["@GrandTotal"].Value = GrandTotal;
con.nonquery();
}
public void UpdatePOCartTable(int PO_No,string ISBN_No, decimal UnitPrice, int OrderQuantity, decimal Total)
{
DynamicConnection con = new DynamicConnection();
con.mysqlconnection();
string query = "UPDATE TBL_PO_Cart"
+ " SET ISBN_No=@ISBN_No,UnitPrice=@UnitPrice,"
+ "OrderQuantity=@OrderQuantity,Total=@Total"
+ "WHERE PO_No = @PO_No";
con.sqlquery(query);
con.cmd.Parameters.Add(new SqlParameter("@PO_No", SqlDbType.Int));
con.cmd.Parameters["@PO_No"].Value = PO_No;
con.cmd.Parameters.Add(new SqlParameter("@ISBN_No", SqlDbType.NVarChar));
con.cmd.Parameters["@ISBN_No"].Value = ISBN_No;
con.cmd.Parameters.Add(new SqlParameter("@UnitPrice", SqlDbType.Date));
con.cmd.Parameters["@UnitPrice"].Value = UnitPrice;
con.cmd.Parameters.Add(new SqlParameter("@OrderQuantity", SqlDbType.NVarChar));
con.cmd.Parameters["@OrderQuantity"].Value = OrderQuantity;
con.cmd.Parameters.Add(new SqlParameter("@Total", SqlDbType.Money));
con.cmd.Parameters["@Total"].Value = Total;
con.nonquery();
}
答案 0 :(得分:0)
从Join更新的语法类似于MySQL。但是它在SQL Server中是不同的
UPDATE TBL_PO
SET TBL_PO.PO_No=@PO_No,TBL_PO.Supplier_ID = @Supplier_ID,TBL_PO.Date = @Date,
TBL_PO.RequiredDate = @RequiredDate,TBL_PO.GrandTotal=@GrandTotal,
FROM TBL_PO
INNER JOIN TBL_PO_Cart ON TBL_PO_Cart.PO_No = TBL_PO.PO_No
WHERE TBL_PO.PO_No = @PO_No
UPDATE TBL_PO_Cart
SET TBL_PO_Cart.ISBN_No=@ISBN_No,TBL_PO_Cart.UnitPrice=@UnitPrice
,TBL_PO_Cart.OrderQuantity=@OrderQuantity,TBL_PO_Cart.Total=@Total
FROM TBL_PO
INNER JOIN TBL_PO_Cart ON TBL_PO_Cart.PO_No = TBL_PO.PO_No
WHERE TBL_PO.PO_No = @PO_No
如果您要求使用1个语句更新2个表,则无法进行更新。 没有RDBMS会允许它。相反,您可以拥有具有2个更新语句的Single事务,以便您可以提交/回滚。
根据更改的问题进行编辑:
如上所述,您无法更新Identity属性强加的列。我们通常不会触摸标识栏。
为了填补空白,我们提供临时设置
IDENTITY_INSERT
但如下面的答案中所述,您可以删除记录并重新插入上述设置为ON。你可以试试这个。