Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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# 插入并选择Sql中的最后一个值_C#_Sql - Fatal编程技术网

C# 插入并选择Sql中的最后一个值

C# 插入并选择Sql中的最后一个值,c#,sql,C#,Sql,我想在子表中插入最后一个客户id,但下面的代码插入了所有数据 public void insertCustomer(int eqpId) { con = new Connection2DB(); con.sqlquery("insert into Customer_Equipment(Cst_ID,EquipId) values ((Select Max(Cst_ID) from Customer),'"+eqpId+"')"); con

我想在子表中插入最后一个客户id,但下面的代码插入了所有数据

public void insertCustomer(int eqpId)
    {
        con = new Connection2DB();
        con.sqlquery("insert into Customer_Equipment(Cst_ID,EquipId) values ((Select Max(Cst_ID) from Customer),'"+eqpId+"')");

        con.NonQueryEx();
    }
你应该使用

试着这样做:

`    
"UPDATE Customer_Equipment
SET EquipId = " + eqpId + "
WHERE Cst_ID = (Select Max(Cst_ID) from Customer)
`
不确定这是否100%准确,但希望你能理解

另外,为了改进代码风格,我建议您查看使用

SELECT IDENT_CURRENT(‘tablename’)
这是您修改过的查询

con.sqlquery("insert into Customer_Equipment(Cst_ID,EquipId) values ((SELECT IDENT_CURRENT(‘Customer’)),'"+eqpId+"')");
所以你可以像这样使用它

public void insertCustomer(int eqpId)
{
    con = new Connection2DB();
    con.sqlquery("insert into Customer_Equipment(Cst_ID,EquipId) values (SCOPE_IDENTITY(),'"+eqpId+"')");

    con.NonQueryEx();
}

还有另外两种可能性,如@@IDENTITY和IDENT\u CURRENT。每个数据库的行为略有不同。

您能标记正在使用的数据库吗?为什么不使用标识栏功能?@Talha您的问题非常模糊。为什么要插入最后一个ID?你最后一次是什么意思?最大值?或者代码插入的最后一个值?@Talha对于最后插入的记录,您应该使用identity列功能。@Talha在尝试从C执行查询之前,您可能应该检查iNSERT语句的工作方式?并尝试使用查询工具,例如SQLServer的SSMS?如果要插入查询结果,请使用insert。。。选择,而不是插入值。它的编写方式将抛出语法错误。首先尝试让查询正常工作,然后寻找从cb调用它的方法,但它只会在子表中插入eqpId我想要equipmentId和CustomerId插值没有任何改进。它与构造查询时的字符串连接一样糟糕,使代码完全暴露于SQL注入攻击和转换问题。真正的改进是使用参数化queries@Talha它实际上会更新最后一个客户的eqpID。顺便说一句,MAXCst_ID不会返回父级的ID,除非其他人不使用该数据库。即使这样,如果有删除,它也可能返回错误的ID。顺便说一句:您应该在查询中使用sql参数,而不是直接使用变量。e、 g.在客户设备CST ID中插入设备ID值范围标识@eqpId
public void insertCustomer(int eqpId)
{
    con = new Connection2DB();
    con.sqlquery("insert into Customer_Equipment(Cst_ID,EquipId) values (SCOPE_IDENTITY(),'"+eqpId+"')");

    con.NonQueryEx();
}