我正在尝试更新我的数据库。但是,当我打印由ExecuteNonQuery()返回的对象时,它表示为0。
这是我的代码:
try
{
using(dbConnection = new SqliteConnection(dbConnString))
{
dbConnection.Open();
using(dbCommand = dbConnection.CreateCommand())
{
dbCommand.CommandText = "UPDATE 'GameObject' SET 'LocationX' = @locX, 'LocationY' = @locY, 'LocationZ' = @locZ WHERE 'id' = @id";
dbCommand.Parameters.AddRange(new SqliteParameter[]
{
new SqliteParameter("@locX") { Value = x},
new SqliteParameter("@locY") { Value = y},
new SqliteParameter("@locZ") { Value = z},
new SqliteParameter("@id") {Value = id}
});
int i = dbCommand.ExecuteNonQuery();
Debug.Log(i);
}//end dbcommand
}//end dbconnection
}//end try
catch(Exception e)
{
Debug.Log(e);
}
我认为这是因为我的where子句,因为当我将此子句添加到select查询时,我的变量将不会更新。我只是找不到它的错误。
选择查询:
try
{
using(dbConnection = new SqliteConnection(dbConnString))
{
dbConnection.Open();
using(dbCommand = dbConnection.CreateCommand())
{
dbCommand.CommandText = "SELECT * FROM 'GameObject' WHERE 'id' = @id"; //without the where everything works fine
dbCommand.Parameters.Add (new SqliteParameter("@id") { Value = 1});
using(dbReader = dbCommand.ExecuteReader())
{
while(dbReader.Read())
{
id = dbReader.GetInt32(0);
x = dbReader.GetFloat(1);
y = dbReader.GetFloat(2);
z = dbReader.GetFloat(3);
}
}//end dbreader
}//end dbcommand
}//end dbconnection
_object.transform.position = new Vector3(x,y,z);
Debug.Log ("id: " + id + " location: " + _object.transform.position);
}
catch(Exception e)
{
Debug.Log(e);
}
答案 0 :(得分:1)
一个原因可能来自https://www.sqlite.org/lang_keywords.html
面对历史SQL语句时的弹性,SQLite 有时会弯曲上面的引用规则:
如果在a中使用单引号中的关键字(例如:
'key'
或'glob'
) 允许使用标识符但字符串文字所在的上下文 不允许,然后令牌被理解为标识符 字符串文字。
由于它们都不是关键字,因此请尝试使用它们而不使用单引号。