插入记录后抓取记录ID
本文关键字:记录 ID 抓取 插入 | 更新日期: 2023-09-27 18:03:44
我需要获取记录的ID,这样我就可以将用户转发到包含他们刚刚提交的信息的另一个页面。我看了看关于这个的其他问题,人们建议使用SELECT SCOPE_IDENTITY()或OUTPUT,但我对c#和SQL真的很陌生,所以我不知道如何使用它与我现有的代码。如有任何帮助,不胜感激。
您可以看到,我需要将刚刚插入的记录的ID放在response.redirect中。
pcn.Open();
pcm.Connection = pcn;
string logon_user = Request.ServerVariables["LOGON_USER"].Substring(7);
var sql = String.Format(@"INSERT INTO Transfer (Status, Type, Name) values ('{0}','{1}','{2}')", '0', TypeTxtBox.Text.Replace("'", "''"), logon_user);
pcm.CommandText = sql;
pcm.ExecuteNonQuery();
pcn.Close();
Response.Redirect("View.aspx?ID=" + id);
是的,我看到还有其他类似的问题,但我正在寻找我上面的代码的确切帮助,不要标记这个重复,因为它不是!
首先阅读参数化SQL,不要在SQL中使用字符串连接,因为你更有可能陷入SQL注入的混乱!
要获取ID,您需要更新代码,使其看起来像这样:pcm.CommandText = "INSERT INTO Transfer (Status, Type, Name) values (@status, @type, @name);SELECT SCOPE_IDENTITY();";
object identifier = pcm.ExecuteScalar();
如果你的标识符是整数,你可以将identifier
转换为int来获得值(根据Guids等进行相应调整)
int id = (int)identifier;
SCOPE_IDENTITY
获取插入到范围内标识列中的最后一个标识值。SqlCommand.ExecuteScalar
执行脚本,获取ID。
var sql = String.Format(@"INSERT INTO Transfer (Status, Type, Name) values ('{0}','{1}','{2}')
SELECT CAST(scope_identity() AS int)"
, '0', TypeTxtBox.Text.Replace("'", "''"), logon_user);
int ID = (int)pcm.ExecuteScalar();
您需要使用ExecuteScalar而不是ExecuteNonQuery。有多种方法可以获得ID,但我将使用SCOPE_IDENTITY()。
你可以在MSDN上看到一个例子:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx