executiontenonquery不工作,没有列编辑

时间:2015-05-05 11:53:50

标签: c# sqlite

我正在尝试更新我的数据库。但是,当我打印由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);
        }

1 个答案:

答案 0 :(得分:1)

一个原因可能来自https://www.sqlite.org/lang_keywords.html

  

面对历史SQL语句时的弹性,SQLite   有时会弯曲上面的引用规则:

     

如果在a中使用单引号中的关键字(例如:'key''glob')   允许使用标识符但字符串文字所在的上下文   不允许,然后令牌被理解为标识符   字符串文字。

由于它们都不是关键字,因此请尝试使用它们而不使用单引号。