SQL Server中最后插入的行的值

时间:2017-02-07 02:55:17

标签: c# sql-server

我参考选中的答案“How to get last inserted id?

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

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

然后我想获得n_asset_id的适当ID。

问题是cmdInsert将其插入加倍(可能在我的if条件下),但我无法使Decimal newId = (Decimal)cmdInsert2.ExecuteScalar();正确运行。我试着让它成为一个Int。然后字符串 - >转换为int但仍然没有运气。

1 个答案:

答案 0 :(得分:3)

  

问题是cmdInsert将其插入加倍

那是因为您执行了两次SQL查询:

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

如果你只想要后者,你应该完全省略前者:

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

输出可能也应该是int,因为插入的标识符将是int

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

顺便说一句,请注意您的代码对所谓的&#34; SQL注入攻击&#34;持开放态度。也就是说,精明的用户可以使您的系统在您的服务器上执行任意SQL代码。同样的漏洞也会使您的代码更加脆弱并且更难以调试,因为意外的字符(不一定是恶意的,甚至只是偶然的)可能会导致SQL代码出错,甚至在运行时都不知道您的SQL代码是什么< EM>是

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