Member 12693361 Ответов: 2

Возврат последней вставленной записи с помощью ADO.NET


У меня есть следующий код

public void addSeesion(int userid)
{
строка qry = "вставить в Session_Info(Session_Id,User_Id)значения(@SessionId,@UserId)";
MySqlCommand cmd = new MySqlCommand(qry, Connection.Get());
cmd.параметры.AddWithValue("@SessionId", сессия);
cmd.параметры.AddWithValue("@UserId", userid);
УМК.Метод executenonquery();
}


В таблице есть 3 столбца, включая первичный ключ. Теперь я хочу получить последнюю вставленную запись после этого, не делая нового запроса. cmd.ExecuteScalar и cmd.LastInsertedId дает первичный ключ.

Но мне нужна вся строка или значение Session_Id. Действительно ли это возможно или есть какой-то другой способ???

Что я уже пробовал:

cmd.ExecuteScalar и cmd.LastInsertedId дает первичный ключ.
Но мне нужна вся запись.

ZurdoDev

Чего тебе не хватает? Вы просто вставили запись, так что у вас есть все значения, верно?

Member 12693361

Да, но я должен убедиться, что запись должным образом обновлена.

ZurdoDev

До тех пор, пока вы не получите ошибку и ваш sql будет правильным, тогда он работал. Я не совсем понимаю, что вы ищете.

F-ES Sitecore

Вам нужно будет сделать дополнительный запрос, обойти его невозможно. Однако, как сказал Райан, если ни одно из полей не вычисляется каким-либо образом, то у вас все равно есть все данные.

Member 12693361

конечно, у меня есть ценности.Но как я могу твердо верить, что запись обновляется с точными значениями??

F-ES Sitecore

Потому что во всем мире SQL, вероятно, обновляет миллиард бит информации каждую секунду, и если бы был шанс, что данные на самом деле не были обновлены, кто-то сообщил бы об этом как об ошибке? :)

Karthik_Mahalingam

sql или mysql ?

Member 12693361

в MySQL

Karthik_Mahalingam

попробовать это
Выберите LAST_INSERT_ID() из Session_Info

agolddog

Я думаю, что должен пойти с Зурдодевым и остальными. Ваше взаимодействие приведет только к одному из двух: успеху или исключению.

Если нет исключений, у вас есть все ценности, с которыми вы пришли. Используйте одну из вещей, которые вы уже обнаружили, чтобы получить новый идентификатор, и создайте некоторый объект для возврата (вместо void), построив этот объект из входных данных + новый идентификатор.

Если есть исключение, вы хотите справиться с ним любым подходящим для этого уровня вашей системы способом (я бы предположил, что просто позвольте ему всплыть, если только у вас нет ведения журнала на этом уровне).

Одна незначительная вещь заключается в том, что ваше имя метода написано с ошибкой: addSession.

2 Ответов

Рейтинг:
1

OriginalGriff

Способ, которым я бы это сделал, прост: добавьте столбец DATETIME под названием InsertAt и установите для него значение по умолчанию GETDATE()
Тогда все, что вам нужно сделать, это:

SELECT TOP 1 * FROM MyTable ORDER BY InsertAt DESC

Поскольку вы задали ему значение по умолчанию, никакой другой код не должен нуждаться в изменениях.


F-ES Sitecore

Если вы являетесь пользователем, а UserB вызывает создание другой записи между вами, вставляя вашу запись и делая "select top", то вы получите их данные, а не свои собственные.

Member 12693361

Я не предпочитаю другой вопрос.Я просто хочу, чтобы запись была возвращена командному объекту.Я спрашиваю о чем-то невозможном??Пожалуйста, поделитесь своими мыслями.

Рейтинг:
0

Knightmare RIP

Попробовать это...

Insert into [tableName]
    ([Col1], [Col2], [Coln])
  Output Inserted.*
  Values
    (...)


CHill60

Я противопоставил нисходящий голос, но только с помощью 4 - го OP опубликовал код C#, и вы включили только SQL - для полноты картины я бы предпочел увидеть пример его использования в ADO.net/ASP.net/C#

Richard Deeming

Я контратаковал голосование-ОП использовал MySQL, и, насколько я вижу, это не поддерживает OUTPUT пункт.

CHill60

Хороший вариант - я пошел по тегу и полностью пропустил объект, используемый в коде :-(