2017-01-10 16 views
1

私はUnityを使用しています。私のコードはちょっとしたコードです。私がしたいのは、data.tokendata.expireをSQLiteに入れることだけです。それは私にあるエラー投げ続けていくつかの理由:SQLiteエラーが認識されないトークンUnity

SqliteException: SQLite error 
unrecognized token: "587503bc773a565d52401c87" 
Mono.Data.Sqlite.SQLite3.Prepare (Mono.Data.Sqlite.SqliteConnection cnn, System.String strSql, Mono.Data.Sqlite.SqliteStatement previous, UInt32 timeoutMS, System.String& strRemain) 
Mono.Data.Sqlite.SqliteCommand.BuildNextCommand() 

私はトークンが認識されないか見当がつかないが、SQLiteのではTokenフィールドはSTRINGあるとExpireフィールドがINTEGERです。 SQLクエリで

IncomingTokenData data = IncomingTokenData.CreateFromJSON(www.text); 

string conn = "URI=file:" + Application.dataPath + "/MyDataBase.s3db"; //Path to database. 
var sqlQuery = "INSERT INTO MyDataBase(Token, Expire) VALUES(" + data.token +", " + data.expire + ")"; 

if(!string.IsNullOrEmpty(www.error)) { 
    ErrText.text = "Error: " + www.error; 
}else{ 
    if(data.pass == "1"){ 
     IDbConnection dbconn; 
     dbconn = (IDbConnection) new SqliteConnection(conn); 
     dbconn.Open(); //Open connection to the database. 
     IDbCommand dbcmd = dbconn.CreateCommand(); 
     dbcmd.CommandText = sqlQuery; 
     dbcmd.ExecuteNonQuery(); 

答えて

2

は、あなたが単一引用符で囲んだ文字列値を囲む必要があります(この場合は、場所は周りdata.tokenを引用):

​​

なお、文字列の連結を構築するための最良の方法ではありませんSQLクエリ - これらの問題を回避するために、より堅牢な方法は、パラメータを追加するためのbuilt-in functionality IDbCommand hasのように、プレースホルダを使用することです:

var sqlQuery = "INSERT INTO MyDataBase(Token, Expire) VALUES(@token, @expire)"; 

if(!string.IsNullOrEmpty(www.error)) { 
    ErrText.text = "Error: " + www.error; 
}else{ 
    if(data.pass == "1"){ 
     IDbConnection dbconn; 
     dbconn = (IDbConnection) new SqliteConnection(conn); 
     dbconn.Open(); //Open connection to the database. 
     IDbCommand dbcmd = dbconn.CreateCommand(); 
     dbcmd.Parameters.Add("@token", SqlDbType.VarChar).Value = data.token; 
     dbcmd.Parameters.Add("@expire", SqlDbType.Int).Value = data.expire; 
     dbcmd.CommandText = sqlQuery; 
     dbcmd.ExecuteNonQuery(); 

を、この方法を使用して、値はデータ型に応じて適切にフォーマットされます。

+0

ありがとうございました:) –

+0

@CorySparks喜んで助けてください! 'String.Format()'を使ってクエリを構築しても、あなたのために何が最善のものかを見いだすと、これらのことを見つけるのが簡単になることがあります。 – Serlite

+0

'IDbConnection'はプレースホルダを使用する方法がありませんか? – simbabque

関連する問題