2013-03-12 3 views
1

Мне нужно получить идентификатор записи, чтобы я мог переслать пользователя на другую страницу с информацией, которую они только что отправили. Я рассмотрел другие вопросы, касающиеся этого, и люди предлагают использовать SELECT SCOPE_IDENTITY() или OUTPUT, но я действительно новичок в C# и SQL, поэтому я не знаю точно, как использовать его с моим существующим кодом. Будем очень благодарны любой помощи.Записать идентификатор записи после вставки записи

Вы можете увидеть, что мне нужно поместить идентификатор записи, которую я только что вставил в 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); 

Да, я вижу, что есть и другие вопросы, подобные этим, но я искал точную помощь с моим кодом выше, не отмечайте этот дубликат, потому что его нет!

+1

Вы всегда можете запустить 'SELECT SCOPE_IDENTITY();' – MethodMan

+2

Использовать параметры для предотвращения SQL-инъекции. http://stackoverflow.com/a/9319609/284240 –

+0

Это внутренний скрипт, который используется только мной и никем другим, я не беспокоюсь о SQL-инъекции. Благодарю вас за предложение. – techora

ответ

0

SCOPE_IDENTITY получает последнее значение идентификации, введенное в столбец идентификации в области. SqlCommand.ExecuteScalar выполняет сценарий и получает идентификатор.

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

Это работало без меня, чтобы изменить тонну кода, спасибо вам очень. – techora

3

Во-первых, читать на параметризованные SQL, никогда не использовать конкатенацию для SQL, как вы гораздо больше шансов попасть в немилость SQL инъекции!

Чтобы получить идентификатор, вам нужно будет обновить свой код, чтобы выглядеть следующим образом:

pcm.CommandText = "INSERT INTO Transfer (Status, Type, Name) values (@status, @type, @name);SELECT SCOPE_IDENTITY();"; 
object identifier = pcm.ExecuteScalar(); 

если ваши идентификаторы являются целыми числами, вы можете бросить identifier к междунар, чтобы получить значение (настроить соответствующим образом для Guids и т. д.)

int id = (int)identifier; 
Смежные вопросы