我参考选中的答案“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但仍然没有运气。
答案 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>是
要解决此问题,请查看在查询中使用参数。永远不要将值作为代码执行,始终将它们作为参数值添加到命令对象中。