SQLite如何从最后一个ExecuteNonQuery()命令读取字段的值

时间:2016-08-20 13:06:07

标签: vb.net sqlite

我需要管理两个表之间的关系,如:

Mike > Rock - Pop - Metal
Tom > Pop - Tecno

然后我接受来自组合框的用户的数据" name"字段和"类型"的列表框字段,所以我可以有类似的东西:

Dim connSave = New SQLiteConnection("Data Source=DataBaseUserType.sqlite;Version=3")
Try
    Using (connSave)
        connSave.Open()
        Dim sql = "INSERT INTO users (name) VALUES (@paramName)"
        Dim cmdSave As SQLiteCommand = New SQLiteCommand(sql, connSave)
        'Tomando parámetros de https://www.devart.com/dotconnect/sqlite/docs/Devart.Data.SQLite~Devart.Data.SQLite.SQLiteCommand_members.html'
        cmdSave.CommandText = sql
        cmdSave.Connection = connSave
        cmdSave.Parameters.AddWithValue("@paramName", cboName.Text)
        cmdSave.ExecuteNonQuery()

    End Using

Catch ex As Exception
    MsgBox(ex.ToString())
End Try

依旧......

下一个代码我在用户表上写信息

#include <iostream>

using namespace std;

int fn_test(int i=5)
{
    if(i%2) return i++;
    else
    return fn_test(i-1);
}
int main()
{ int test=fn_test(5);
   cout<< " this is out put " << test;
   return 0;
}

但是我需要知道自动生成字段userID的值,这样我就可以在typeTable上保存第一条记录,如:

48 - Rock(其中48是Mike的用户ID)

有没有办法在cmdSave.ExecuteNonQuery()之后读取userID值? 或者我是否需要再次打开连接并读取最后一条记录以加载userID SELECT * FROM mainTable WHERE ROWID IN(SELECT max(ROWID)FROM mainTable) ??

1 个答案:

答案 0 :(得分:1)

好吧,您不需要再次打开连接。根据文档,您应该调用此函数

last_insert_rowid()

所以,就在ExecuteNonQuery添加这些行之后

    .....
    cmdSave.ExecuteNonQuery()
    cmdSave.Parameters.Clear()
    cmdSave.CommandText = "SELECT last_insert_rowid()"
    Dim lastID = cmdSave.ExecuteScalar()
    .....
End Using

在Sql Server中,可以将两个命令连接在一个字符串中,用分号分隔它们。我现在无法在SQLite上测试它,但您可以尝试与

一起运行它们
Dim sql = "INSERT INTO users (name) VALUES (@paramName);
           SELECT last_row_id()"

仍然使用ExecuteScalar来获取Select

的结果