0

Access 2003 VS 2010 C#

WHERE 句に問題があります。最初は OR を使用していましたが、今では WHERE と関係があるに違いないことに気付きました。誰かがここで私を助けてください。前もって感謝します。ps c 鋭い学生が以前私を助けてくれました。

学生テーブル

フィールド名のデータ型

 ID         Number 
 FirstName  Text
 LastName   Text
 StudentDOB Date/Time
 Course     Text

接続文字列:

myCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\StudentDB.mdb");

btnFind メソッド...

private void btnFind_Click(object sender, EventArgs e)
    {
        string title = txtSearch.Text.ToString();
        string queryString = "SELECT * FROM StudentTable WHERE ID = ?"; //I have also tried WHERE ID = @ID without success

        OleDbCommand command = new OleDbCommand();
        command.CommandText = queryString;
        command.Connection = myCon;
        myCon.Open();
        OleDbDataReader dr = command.ExecuteReader();
        while (dr.Read())
        {
            txtStudID.Text += String.Format("ID: {0}\n", dr["ID"].ToString());
            txtFirstName.Text += String.Format("FirstName: {0}\n", dr["FirstName"].ToString());
            txtLastName.Text += String.Format("LastName: {0}\n", dr["LastName"].ToString());
            txtStudDOB.Text += String.Format("StudentDOB: {0}\n", dr["StudentDOB"].ToString());
            txtCourse.Text += String.Format("Course: {0}\n", dr["Course"].ToString());

        }
        myCon.Close();

    }

私の削除方法はこれで、問題はありません(知りたいと思いました)...

 private void btnDelete_Click(object sender, EventArgs e)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        cmd.CommandText = "DELETE FROM StudentTable WHERE txtStudID = ?";
        cmd.Parameters.AddWithValue("@ID", txtStudID.Text);
        cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
        cmd.Parameters.AddWithValue("@LastName", txtLastName.Text);
        cmd.Parameters.AddWithValue("@StudDOB", txtStudDOB.Text);
        cmd.Parameters.AddWithValue("@Course", txtCourse.Text);

        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        myCon.Close();

    }

Accessで問題なくSQLクエリをテストしました...

SELECT StudentTable.ID
FROM StudentTable
WHERE (((StudentTable.ID)=1));

解決策が見つかりました

もちろん、stackoverflowから、このリンクから解決策を見つけました....

ここ

貴重な時間をありがとう、特にブラッド。

ブラッド - これがコードです

private void btnFind_Click(object sender, EventArgs e)
    {

        using (var command = myCon.CreateCommand())
        {
            command.CommandText = "select * from StudentTable where ID = @ID";
            command.Parameters.AddWithValue("ID", int.Parse(txtSearch.Text));

            myCon.Open();
            var reader = command.ExecuteReader();

            while (reader.Read())
            {
                txtStudID.Text = reader["ID"].ToString();
                txtFirstName.Text = reader["FirstName"].ToString();
                txtLastName.Text = reader["LastName"].ToString();
                txtStudDOB.Text = reader["StudentDOB"].ToString();
                txtCourse.Text = reader["Course"].ToString();

            }
        }       myCon.Close();
                myCon.Close();

      }

実際にはOR句を使用しない場合があります-これで十分です。

4

3 に答える 3

0

パラメータを追加しませんSelect

command.Parameters.AddWithValue("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = int.Parse(txtStudID.Text);

また、多くのパラメーターがありますDeleteが、そのうちの 1 つだけを使用します。それは転記ミスでしたか、それとも@FirstName@LastName@StudDOBそして@Course実際に使用されなくなりましたか? @ID最初のものであるため、たまたま正しく使用されます。

于 2013-03-12T20:06:21.603 に答える
0

SQL クエリにパラメーター マーカー (?) が含まれていますが、その値を指定していません。あなたの削除メソッドはそれを正しく行います(コレクションを呼び出しAddWithValueますParameters)が、それでもクエリにあまりにも多くのパラメータを追加しています。

OLEDB のパラメーター化されたクエリに慣れる必要があります。ここから始めて、例を確認してください。

于 2013-03-12T20:06:58.130 に答える
0

太字の見出しで更新されたソリューションが見つかりました。明日、このスレッドを閉じることができるというメッセージを受け取りました。

于 2013-03-13T18:24:40.680 に答える