Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用SQLiteCommand对象获取插入的自动递增ID行_C#_Sqlite - Fatal编程技术网

C# 如何使用SQLiteCommand对象获取插入的自动递增ID行

C# 如何使用SQLiteCommand对象获取插入的自动递增ID行,c#,sqlite,C#,Sqlite,我有一个SQLite连接对象和一个命令对象。我使用ExecuteOnQuery函数在表中插入一行。如何从中获取自动增量列(ID)的值 用于创建数据库的代码: creationQuery=“创建不存在的表MyTable(ID INTEGER非NULL主键自动递增,mycl1-NVARCHAR,mycl2-NVARCHAR)”; 我在数据库中插入值的代码: 公共void InsertIntoDB(字符串[]VAL){ //全局连接对象(这在API中,因此每次创建这些对象的新实例时) connOb

我有一个SQLite连接对象和一个命令对象。我使用ExecuteOnQuery函数在表中插入一行。如何从中获取自动增量列(ID)的值

用于创建数据库的代码:

creationQuery=“创建不存在的表MyTable(ID INTEGER非NULL主键自动递增,mycl1-NVARCHAR,mycl2-NVARCHAR)”;
我在数据库中插入值的代码:


公共void InsertIntoDB(字符串[]VAL){
//全局连接对象(这在API中,因此每次创建这些对象的新实例时)
connObj=CreateConnection();
cmdObj=connObj.CreateCommand();
cmdObj.CommandText=“插入MyTable('myCL1',myCL2)值('“+VAL[0]+”,'“+VAL[1]+”)”;
int id=-1;
试一试{
cmdObj.ExecuteNonQuery();
id=(int)cmdObj.Parameters[“id”].Value;//也尝试了“@id”
}捕获(例外情况除外){
掷骰子;
} 
}
此代码正在正确插入。但是在我试图获取ID的行中抛出一个异常(System.ArgumentOutOfRangeException)。发生了什么/如何解决这个问题

编辑1:在try块中,我添加了代码以运行另一个查询“从MyTable中选择最大值(ID)”:

试试看
{
cmdObj.ExecuteNonQuery();
cmdObj.CommandText=“从MyTable中选择最大(id)”;
SQLiteDataReader myReader=cmdObj.ExecuteReader();
while(myReader.Read())
{
id=(int)myReader[“id”];
}
控制台写入线(id);
}
此代码引发相同的异常

select last_insert_rowid();
您需要将其作为标量查询执行

string sql = @"select last_insert_rowid()";
long lastId = (long)command.ExecuteScalar(sql); // Need to type-cast since `ExecuteScalar` returns an object.

插入后,为什么不选择max(id)?这将涉及运行另一个查询来获取id。不能使用相同的obejct来完成吗?从sqlite_序列中选择SEQ,其中name='tablename'在插入数据之前执行此操作插入查询不返回行id。它只返回它执行的操作数。如果使用update,它将返回2。insert将返回1