我需要管理两个表之间的关系,如:
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) ??
答案 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
的结果