Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用在C#中具有标识列的2查询更新2个sqlserver表?_C#_Sql Server_Database_Sql Server 2012 - Fatal编程技术网

如何使用在C#中具有标识列的2查询更新2个sqlserver表?

如何使用在C#中具有标识列的2查询更新2个sqlserver表?,c#,sql-server,database,sql-server-2012,C#,Sql Server,Database,Sql Server 2012,通过对更新表分别使用这两个查询,我可以只更新PO表。当我尝试更新PO_Cart表(与datagridview相关)时,它说我无法更新标识列。现在我可以做什么来解决这个问题 public void UpdatePurchseOrderTable(int PO_No,int Supplier_ID, string Date, string RequiredDate, decimal GrandTotal) { DynamicConnection con = new Dynam

通过对更新表分别使用这两个查询,我可以只更新PO表。当我尝试更新PO_Cart表(与datagridview相关)时,它说我无法更新标识列。现在我可以做什么来解决这个问题

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();
    }

从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
如果您要求用一条语句更新两个表,那么这是不可能的。 没有RDBMS会允许它。相反,您可以有一个具有2条update语句的事务,这样您就可以提交/回滚

根据更改的问题进行编辑:

如错误所述,您无法更新使用属性强制的列。一般来说,我们不会触及身份栏

为了填补空白,我们提供了临时设置

标识插入

但正如下面的回答中所解释的,您可以删除该记录并在打开上述设置的情况下重新插入。你可以在你的情况下试试这个


查看
SET
子句中的表前缀(顺便说一句,它们在SQL Server中无论如何都无效)。他们正在尝试更新多个表。我更改了我的问题。请帮助我。感谢您的宝贵意见