2017-07-14 13 views
-1

はsqliteのddatabaseにそれらを挿入する文字列の配列をループてるが、これはC#のsqliteのエラー:「付近には 『失敗』:構文エラー」

public static bool SavePermissions(String[] permissions) 
    { 
     try 
     { 
      using (SqliteConnection db = new SqliteConnection("Filename="+ shared.AppDetails.dbname)) 
      { 
       db.Open(); 
       SqliteCommand insertCommand = new SqliteCommand(); 
       insertCommand.Connection = db; 
       String tableCommand = "CREATE TABLE IF NOT EXISTS " + _permissiontbl + " (id INTEGER PRIMARY KEY AUTOINCREMENT, user_perm NVARCHAR(2048) UNIQUE)"; 
       SqliteCommand createTable = new SqliteCommand(tableCommand, db); 

       try 
       { 
        createTable.ExecuteReader(); 
        deletePermissions(); 
        foreach (String i in permissions) 
        { 
         var sql = "insert into " + _permissiontbl + " (user_perm) values ("+ i +")"; 
         SqliteCommand command = new SqliteCommand(sql, db); 
         command.ExecuteNonQuery(); 
        } 


       } 
       catch (SqliteException exp) 
       { 
        //Handle error 
        Debug.WriteLine("sqlite error thrown is"+exp.Message); 
       } 
       db.Close(); 
      } 

     } 
     catch(Exception exp) 
     { 
      Debug.WriteLine(exp.Message); 
     } 

ABOVEはエラーをスロー失敗

sqliteエラーが発生しましたisSQLiteエラー1: '近くに失敗しました':構文エラー '。

ここで私は間違っているのは、文字列を1つずつループして1つずつ保存することです。

+0

はあなたのクエリをパラメータ化。 –

答えて

2

データベースに送信している文字列の周囲に単一のティックがありません。

var sql = "insert into " + _permissiontbl + " (user_perm) values ('" + i + "')"; 

@ DangerZoneの提案によれば、私はあなたのクエリをパラメータ化すべきだと思います。ラーフルの提案@パー

は、ここにあなたのクエリをパラメータの例です。

var sql = "insert into " + _permissiontbl + " (user_perm) values (@perm)"; 
SQLiteCommand command = new SQLiteCommand(sql, db); 
command.Parameters.Add(new SQLiteParameter("@perm", i)); 
command.ExecuteNonQuery(); 
+0

良いキャッチ..この – Rahul

+0

のパラメータ化されたバージョンも表示されます –

関連する問題