【发布时间】:2017-02-07 02:55:17
【问题描述】:
我参考勾选的答案“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();
然后我想获得适当的 id,即n_asset_id。
问题是 cmdInsert 将其插入加倍(可能在我的 if 条件下),但我无法使 Decimal newId = (Decimal)cmdInsert2.ExecuteScalar(); 正确运行。我尝试将其设为 Int。然后 string -> 转换为 int 但仍然没有运气。
【问题讨论】:
-
在定义
cmdInsert2之前,你是如何执行它的?如果应该是cmdInsert,那么它就是“将其插入次数加倍”,因为,好吧,你执行了两次。另外,您指的是什么“如果条件”? -
我在
cmdInsert之后立即执行它,然后假设变量should/must被保存在newId中 -
我看到
Decimal newId = (Decimal)cmdInsert2.ExecuteScalar();放在cmdInsert2声明之上。您需要将行 声明为cmdInsert2为SqlCommand。 -
您正在执行
cmdInsert2.ExecuteScalar(),然后在下一行定义SqlCommand cmdInsert2 = ...。您发布的代码无法编译。 -
不要将参数连接到您的查询中。那只是乞求 SQL 注入攻击或带有撇号或其他特殊符号的某些值来破坏您的查询。使用正确参数化的命令。见Why do we always prefer using parameters in SQL statements?
标签: c# sql-server