2015-02-12 2 views
-1

Я использую динамический sql для вставки данных в динамическую таблицу (.NET C#). мне нужно, чтобы получить значение идентификатора столбца в ответ, и я стараюсь использовать SCOPE_IDENTITY, но результат всегда показывает 1.ExecuteSQLCommand SCOPE_IDENTITY() всегда возвращает 1 (.NET C#)

Это мой код

dqDbContext dqx = new dqDbContext(); 
string queryHdr = "INSERT INTO " + tableHdrName + " VALUES (" 
         + configId + ",'Administrator',GETDATE()); SELECT SCOPE_IDENTITY();"; 

int id = dqx.Database.ExecuteSqlCommand(queryHdr); 

Есть ли что-то, что я здесь отсутствует?

Благодаря

Felix

+0

Привет stakx, он был построен в System.Data.Entity .. Я использую MS SQL Server БД и таблица имеет столбец идентификаторов .. Я Попробуем другой метод. Спасибо –

+1

[SQL Injection alert] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - вы должны ** не * * объединить ваши SQL-запросы - использовать ** параметризованные запросы ** вместо этого, чтобы избежать SQL-инъекции. –

+0

hi marc_s возможно ли выполнить некоторую инъекцию sql для параметра, который не вводится пользователем? потому что параметр не от пользовательского ввода .. но я дам ему попробовать изменить его в параметризованный .. спасибо marc_s –

ответ

0

добавить SET NOCOUNT ON;, я думаю, что вы получаете значение 1 является количество строк affeted.

string queryHdr = @"SET NOCOUNT ON; 
        INSERT INTO " + tableHdrName + " VALUES (" 
         + configId + @",'Administrator',GETDATE()); 
        SELECT SCOPE_IDENTITY();"; 
+0

. Привет. Спасибо за ваш ответ. Я просто попробую ваше предложение, и теперь он возвращает -1. Когда я его запускаю на Ms SQL Server Management Studio, он показывает последнее удостоверение, которое я вставляю, но когда я его пытаюсь на C# он возвращается так. –

+0

@Felix Laksana: Отправьте код функции dqx.Database.ExecuteSqlCommand –

+0

Он был создан в System.Data.Entity здесь .. Я попробую другой метод, я думаю, ExecuteSQLCommand может " t использовать так. –

0

Вы можете использовать SqlQuery вместо этого, например:

var identity = ctx.Database 
    .SqlQuery<int>(@"INSERT INTO MyTable (Column1) VALUES ('MyValue'); 
     SELECT CAST(SCOPE_IDENTITY() AS INT)") 
    .Single(); 
Смежные вопросы