0

受け取っています

OleDBExceptionは、「クエリ
式の構文エラー(演算子がありません)」(StudentID = 100'OR StudentName ='Nick'OR StudentCNCI ='78894452)Bob'の未処理エラーでした。

    private void btnFind_Click(object sender, EventArgs e)
    {

        string title = textBox1.Text.ToString();
        string queryString = "SELECT * FROM Students WHERE (StudentID = " + StudIDTb.Text.ToString() + "' OR StudentName = '" + StudNameTb.Text.ToString() + "' OR StudentCNCI = '" + StudCNCITb.Text.ToString() + ")" + title;

        OleDbCommand command = new OleDbCommand();
        command.CommandText = queryString;

        command.Connection = myCon;
        myCon.Open();

        OleDbDataReader dr = command.ExecuteReader(); // error pointing here
        while (dr.Read())
        {
            StudIDTb.Text += String.Format("StudentID: {0}\n", dr["StudentID"].ToString());
            StudNameTb.Text += String.Format("StudentName: {0}\n", dr["StudentName"].ToString());
            StudCNCITb.Text += String.Format("StudentCNIC: {0}\n", dr["StudentCNIC"].ToString());
            StudDOBTb.Text += String.Format("StudentDOB: {0}\n", dr["StudentDOB"].ToString());
        }
        myCon.Close();

     }

私も試しました...

string queryString = "SELECT * FROM Students WHERE (StudentID = " + StudIDTb.Text + "' OR StudentName = '" + StudNameTb.Text + "' OR StudentCNCI = '" + StudCNCITb.Text + ")" + title;

私はあなたに間違った印象を与えたくありません。私は「怠惰」ですが、間違ってクエリを実行したか、タイプミスをしたか、何か別の可能性があるため、このエラーが発生していると思います。よろしくお願いします。

psパラメータ化されたクエリを使用していないという批判を受けていることはわかっています。基本的な権利が得られたら変更します。私はここで多くの同様の質問がなされていることを知っていますが、それでも正しく理解することはできません。

UPDATE1 私はそれをに変更しました

"SELECT * FROM Students WHERE StudentID = " + StudIDTb.Text + " OR StudentName = '" + StudNameTb.Text + "', OR StudentCNCI = '" + StudCNCITb.Text + ")";

エラーが発生しました...

クエリ式の構文エラー(コンマ)

私はそれを調べています

アップデート2

string queryString = "SELECT * FROM Students WHERE StudentID = " + StudIDTb.Text + "' OR StudentName = '" + StudNameTb.Text + "' OR StudentCNCI = '" + StudCNCITb.Text + "'";

同じエラーを受け取ります。

それを調べて

Update 3 解決できない場合は、問題を解決することを意味し、コードの問題を簡単に見つけることができる場合は、パラメーター化されたクエリを使用することを強くお勧めします。

4

1 に答える 1

1

クエリが無効であることを示しています。あなたはこれを持っています

SELECT * 
FROM Students
WHERE (StudentID='a' OR StudentName='b' or StudentCNCI='c')Bob

結局のところ、ボブは好きではなく、なぜそれが必要なのかは明らかではありません。あなたの意図がそこにあることを説明するか、あなたのクエリには必要ないように思われるので、単にそれを取り除いてください。

string queryString = "SELECT * FROM Students WHERE StudentID = '" + 
  StudIDTb.Text + "' OR StudentName = '" + StudNameTb.Text + 
  "' OR StudentCNCI = '" + StudCNCITb.Text + "'";

投稿で言及したように、クエリもパラメーター化する必要があります。それについてサポートが必要な場合はお知らせください。ただし、それは非常に簡単で、ここでの一般的な投稿であるため、それを理解するためのリソースはすでに十分にあります.

編集:必要に応じて、括弧を削除できます。サブクエリなどを実行する場合にのみ必要です。それらはクエリに害を及ぼすことはありません。実際には必要ないだけです。

SELECT * 
FROM Students
WHERE StudentID='a' OR StudentName='b' or StudentCNCI='c'

また、他のコメントから、実際には複数の引用符の不一致があります (最初に 1 つ、最後に 1 つ)。

于 2013-03-10T15:02:26.053 に答える