c#
  • syntax-error
  • oledb
  • oledbconnection
  • 2016-11-21 19 views 0 likes 
    0

    サンプルコードは です。 SQLがチェックされ、外部のSQLクエリとして機能します。OleDbConnection UPDATE構文エラー、SQLは動作しますが、データベースは更新されません

    代わりに、文字列内の値を連結する
    public bool changes() 
        { 
    
    
         OleDbConnection myConnection = GetConnection(); 
    
         string myQuery = "UPDATE Login SET Pass='" + textBox1.Text + "' WHERE User='" + textBox2.Text + "'"; 
    
         OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection); 
    
         try 
         { 
          myConnection.Open(); 
          myCommand.ExecuteNonQuery(); 
          myConnection.Close(); 
    
         } 
         catch (Exception ex) 
         { 
          MessageBox.Show(ex.Message); 
          return false; 
         } 
    
         return true; 
        } 
    
    +0

    どのRDBMSを使用していて、 'myQuery'変数を出力し、何が印刷されているかを確認してください。 – Rahul

    +0

    Provider = Microsoft.ACE.OLEDB.12.0:using:Database.accdbはローカルファイルです。 デバッグ時にUpdateの正しい値を取得しますが、ExecuteNonQuery()メソッドにヒットした後は、そのまま例外Exceptionに移動します。 いいえデータベースの接続に問題があり、SQLでフィールド名とデータベース名が正しくありません。 – Sam

    +0

    例外の詳細はなんですか? –

    答えて

    2

    あなたのWHEREの部分は以下のとおりです。 Userはまた、あなたの現在のアプローチは、SQLインジェクションの脆弱性であるMS Accessでreserve wordであり、従って、[]

    よう
    WHERE [User]='" + textBox2.Text + "'" 
    

    を使用してエスケープする必要があります。代わりに、別の答えで示唆されているように、

    +0

    予約語には良いキャッチがあります。 –

    +0

    これは意味があります。フィールド名の選択肢が不十分です。しかし、彼は彼が手動でクエリを実行することができたと言いました... – JuanR

    +0

    @元、それは投稿中にOPによっておそらくされた間違いです。彼の投稿されたクエリは手動で実行されても実行されません。 – Rahul

    1

    使用パラメータ:(他の誰かがリソースを適切に配置するため、推奨されているように)ここで

    https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx

    は文を使用してとコードサンプルです:

    using (OleDbConnection conn = new OleDbConnection(ConnString)) 
    { 
        using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) 
        { 
        cmd.CommandType = CommandType.Text; 
        cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text); 
        cmd.Parameters.AddWithValue("LastName", txtLastName.Text); 
        conn.Open(); 
        cmd.ExecuteNonQuery(); 
        } 
    } 
    
    +0

    質問はサウンドが現れます。私には、入力がドライバでエラーを引き起こす文字を含んでいなければならないという理由が考えられます。私は彼に質問があるように思えます(なぜそれは動作しません)、私は答えを提供しました(なぜなら、あなたはパラメータを使う代わりに文字列を連結しているからです)。 – JuanR

    +0

    あなたの編集が価値を追加するようにコメントを削除しましたが、ここで本当の問題はありません。私の答えを見てください。 – Rahul

    +0

    私はそれをパラメータに追加しました。それでも同じ構文で終わる。ああ主よ。私を壁の上に運転する。 – Sam

    関連する問題