Когда я запускаю это как свою первую оценку, я получаю исключение near "last_insert_rowid"
. Это относится к последнему last_insert_rowid() ;. Если я установил курсор в строку command.CommandText = и запустил его снова, это нормально.Странный результат с
Что дает? Кажется, что last_insert_rowid работает правильно, почему не работает last_insert_rowid после второй вставки.
Я попытался переместить last_insert_rowid() после выполнения, и я все еще получаю сообщение об ошибке. Что дает?
using (var trans = connection.BeginTransaction())
{
command.CommandText =
"INSERT INTO link_list(link, status, hash_type, hash_id) " +
"VALUES(@link, @status, @hash_type, @hash_id);" +
"INSERT INTO active_dl(linkId, orderNo) " +
"VALUES(last_insert_rowid(), (SELECT COUNT(*) FROM active_dl)); last_insert_rowid();";
command.Parameters.Add("@link", System.Data.DbType.String).Value = link;
command.Parameters.Add("@status", System.Data.DbType.Int32).Value = SiteBase.Status.none;
command.Parameters.Add("@hash_type", System.Data.DbType.Int32).Value = 0;
command.Parameters.Add("@hash_id", System.Data.DbType.Int32).Value = 0;
int rowid = command.ExecuteNonQuery();
trans.Commit();
}
Название вопроса не имеет специфики: «Странный результат с» что? – ndim
В качестве побочного примечания, не ExecuteNonQuery возвращает количество затронутых строк? Если вы хотите вернуть последний вставленный id, вам нужно было бы использовать ExecuteScalar, я бы подумал. – Glenn
Caelum: Ой. Синтаксическая ошибка ослепила меня. Это еще одна ошибка, которая заставит меня врасплох. Спасибо. – 2009-11-05 02:04:34