C# SQL Server中最后插入的行的值

C# SQL Server中最后插入的行的值,c#,sql-server,C#,Sql Server,我指的是勾选答案“” 到目前为止,这就是我所做的 SqlCommand cmdInsert = new SqlCommand("INSERT INTO normal_asset(n_asset_serialNo,n_asset_propertyNo,n_asset_brandModel,n_asset_unitCost,n_asset_acquisitionDate,equitype_id,region_id) OUTPUT INSERTED.N_Asset_ID VALUES ('" + a

我指的是勾选答案“”

到目前为止,这就是我所做的

 SqlCommand cmdInsert = new SqlCommand("INSERT INTO normal_asset(n_asset_serialNo,n_asset_propertyNo,n_asset_brandModel,n_asset_unitCost,n_asset_acquisitionDate,equitype_id,region_id) OUTPUT INSERTED.N_Asset_ID VALUES ('" + assetSerial + "','" + assetProperty + "','" + assetBrand + "','" + assetCost + "','" + assetAcquisition + "','" + assetEquipment + "','" + Session["usersRegion"].ToString() + "')");

 cmdInsert.CommandType = System.Data.CommandType.Text;
 cmdInsert.Connection = conn;

 cmdInsert.ExecuteNonQuery();

 Decimal newId = (Decimal)cmdInsert.ExecuteScalar();

 SqlCommand cmdInsert2 = new SqlCommand("INSERT INTO asset(n_asset_id,office_id,asset_status,asset_accountable,asset_remarks) VALUES ('" + newId + "','" + inputOffice + "','" + inputStatus + "','" + inputAccountable + "','" + inputRemarks + "'");

 cmdInsert2.CommandType = System.Data.CommandType.Text;
 cmdInsert2.Connection = conn;

 cmdInsert2.ExecuteNonQuery();   
然后我想得到适当的id,即
n\u asset\u id

问题是
cmdInsert
的插入量加倍(可能是在我的if条件下),但我无法使
Decimal newId=(Decimal)cmdInsert2.ExecuteScalar()以正确运行。我试着把它变成一个整数。然后字符串->转换成整数,但还是没有运气

问题是cmdInsert的插入量增加了一倍

这是因为您要执行两次SQL查询:

cmdInsert.ExecuteNonQuery();
Decimal newId = (Decimal)cmdInsert.ExecuteScalar();
如果您只想要后者,则应完全忽略前者:

Decimal newId = (Decimal)cmdInsert.ExecuteScalar();
输出可能也应该是
int
,因为插入的标识符将是
int

int newId = (int)cmdInsert.ExecuteScalar();

另外,请注意,您的代码对所谓的“SQL注入攻击”非常开放。也就是说,精明的用户可以使系统在服务器上执行任意SQL代码。同样的漏洞也会使您的代码更加脆弱,调试更加困难,因为意外的字符(不一定是恶意的,甚至只是偶然的)会导致SQL代码中出现错误,并且直到运行时您才知道SQL代码是什么


要解决这个问题,请研究在查询中使用参数。永远不要将值作为代码执行,始终将它们作为参数值添加到命令对象中。

在定义之前,您是如何执行
cmdInsert2
?如果这应该是
cmdInsert
,那么它是“加倍插入”,因为您要执行它两次。还有,你指的是什么“如果条件”?我在
cmdInsert
之后执行它,那么假设变量
应该
/
必须
保存在
newId
中,我看到
Decimal newId=(Decimal)cmdInsert2.ExecuteScalar()位于
cmdInsert2
声明上方。您需要在将
cmdInsert2
声明为
SqlCommand
后放置该行。您正在执行
cmdInsert2.ExecuteScalar()
,然后在下一行定义
SqlCommand cmdInsert2=…
。您发布的代码未编译。请不要将参数连接到查询中。这只是在乞求SQL注入攻击,或者用撇号或其他特殊符号来破坏查询。使用正确参数化的命令。看,我稍后会检查的,好先生。
intnewid=(int)cmdInsert.ExecuteScalar()这将引发异常。可能是这样的
int newId=Convert.ToInt32(cmdInsert.ExecuteScalar())