2016-07-06 3 views
1

さまざまなテキストボックスとドロップダウンボックスを持つWPFアプリケーションがあります。 SQLiteデータベースに最初にデータを挿入する前にメソッドを再作成しました。コードを実行すると、「SQLロジックエラーまたはデータベースがありません」というエラーが発生します。 「:構文エラー。」C#SQLiteのアップデートエラー(SQLロジックエラーまたは "(":syntax error。 ")の近くにデータベースがありません)

private void ButtonEditExmUpdate_OnClick(object sender, RoutedEventArgs e) 
{ 

    var ModifiedDateTime = DateTime.Now; 
    { 
     var ConnString = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString; 

     using (var DbConnection = new SQLiteConnection(ConnString)) 
     { 
      try 
      {var InsertIntoTable = (@"Update [Exm] 
       Set(ExmID = @ExmID, ExmEnvironmentType = @ExmEnvironmentType, ExmURL = @ExmURL, ExmServer = @ExmServer, ExmModifiedDate = @ExmModifiedDate, ExmDeleted = @ExmDeleted) 
       WHERE(Exm.ExmDeleted = 0) AND (Exm.ExmID = '" + ExmID.Text + "')"); 
       var insertIntoUsernamePasswordString = (@"Update [ExmUsernamePassword] 
       Set (ExmUsername = @ExmUsername, ExmPassword = @ExmPassword, ExmServer = @ExmServer, ExmModifiedDate = @ExmModifiedDate) 
       WHERE(ExmUsernamePassword.Deleted = 0) AND (ExmUsernamePassword.ExmUsernamePasswordsID = '" + ExmUsernamePasswordsID.Text + "')"); 
       var insertIntoExmTable = new SQLiteCommand(insertIntoExmTableString); 
       var insertIntoExmUsernamePasswordTable = new SQLiteCommand(insertIntoUsernamePasswordString); 

       insertIntoExmTable.Connection = DbConnection; 
       insertIntoExmUsernamePasswordTable.Connection = DbConnection; 
       DbConnection.Open(); 

       insertIntoExmTable.Parameters.AddWithValue("@ExmEnvironmentType", ComboBoxExmEnvironmentType.Text); 
       insertIntoExmTable.Parameters.AddWithValue("@ExmURL", TextBoxExmUrl.Text); 
       insertIntoExmTable.Parameters.AddWithValue("@ExmServer", TextBoxExmServerName.Text); 
       insertIntoExmTable.Parameters.AddWithValue("@ExmModifiedDate", ModifiedDateTime); 

       insertIntoExmUsernamePasswordTable.Parameters.AddWithValue("@ExmUsername", TextBoxExmUsername.Text); 
       insertIntoExmUsernamePasswordTable.Parameters.AddWithValue("@ExmPassword", TextBoxExmPassword.Text); 
       insertIntoExmUsernamePasswordTable.Parameters.AddWithValue("@ExmServer", TextBoxExmServerName.Text); 
       insertIntoExmUsernamePasswordTable.Parameters.AddWithValue("@ExmModifiedDate", ModifiedDateTime); 

       try 
       { 
        insertIntoExmTable.ExecuteNonQuery(); 
        DbConnection.Close(); 
        DbConnection.Open(); 
        insertIntoExmUsernamePasswordTable.ExecuteNonQuery(); 
        DbConnection.Close(); 
        MessageBox.Show("Successfully updated"); 
       } 
       catch (Exception ex) 
       { 
        throw new Exception(ex.Message); 
       } 
      } 
     } 
    } 
} 
} 

エラー: SQLロジックエラーまたは欠落しているデータベース近い "(":構文エラー

+2

(http://bobby-tables.com)および '行方不明database'はあなたがsqliteのに接続したときに、デフォルトのDBを設定するので、あなたのいずれかなかったことを示唆しています'update dbname.table ...'が必要です。あるいは、クエリを実行する前に適切なデータベースを選択してください。 –

+0

ExmPasswordとExmServerが二重になっています。コピーの貼り付けエラーですか? –

+0

@x ...はい、コピー&ペーストエラーが更新されました。 –

答えて

1

私が引き起こしていたものを見つけこれは私のSET文が角括弧内に入っていたためで、最終的なコードはSQL文字列のように見えます。あなたは[SQLインジェクション攻撃]に対して脆弱である

var InsertIntoTable = (@"Update [Exm] 
       Set ExmID = @ExmID, ExmEnvironmentType = @ExmEnvironmentType, ExmURL = @ExmURL, ExmServer = @ExmServer, ExmModifiedDate = @ExmModifiedDate, ExmDeleted = @ExmDeleted 
       WHERE(Exm.ExmDeleted = 0) AND (Exm.ExmID = '" + ExmID.Text + "')"); 
var insertIntoUsernamePasswordString = (@"Update [ExmUsernamePassword] 
       Set ExmUsername = @ExmUsername, ExmPassword = @ExmPassword, ExmServer = @ExmServer, ExmModifiedDate = @ExmModifiedDate 
       WHERE(ExmUsernamePassword.Deleted = 0) AND (ExmUsernamePassword.ExmUsernamePasswordsID = '" + ExmUsernamePasswordsID.Text + "')"); 
関連する問題