Вставить метод не работает, как ожидалось

Я сделал всю свою базу данных для своего приложения, используя только VS2012 Express (я использую localdb), поэтому он занимался созданием базы данных, а также созданием наборов данных и адаптеров таблиц для моего приложения. Пока это работает очень хорошо. Я также создал классы-обертки, чтобы разрешить асинхронное чтение из базы данных, что также прекрасно работает.

Глядя на мои адаптеры таблиц в конструкторе, когда я добавил свои методы вставки (например, на Races таблица) использовался следующий запрос:

INSERT INTO Races (ChampionshipID, Driver1, Driver2, RaceTime)
VALUES        (@ChampionshipID,@Driver1,@Driver2,@RaceTime); 
SELECT ID, ChampionshipID, Driver1, Driver2, RaceTime FROM Races WHERE (ID = SCOPE_IDENTITY())

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

int Insert1(long ChampionshipID, long Driver1, long Driver2, DateTime RaceTime)

Это возвращает int а не ожидаемый DataRow или же DataTableи не требует DataTable в качестве параметра, чтобы вставить его в.

Я делаю что-то неправильно? Как я могу реализовать эту функциональность?

1 ответ

Решение

Ответ - нет, потому что метод вставки использует ExcecuteNonQuery метод ADO.NETВот почему ваш метод вставки возвращает int с идентификатором вставленной записи.

Вы можете попробовать запросить что-то вроде select @@identity сразу после вставки, так что вы сможете получить запись позже.

Другие вопросы по тегам