1

私は C# が初めてで、数週間しか勉強していません。私はWindowsフォームとAccessデータベースを背後に持つアプリケーションを書いています。ユーザーが挿入した詳細をアクセスデータベースに追加したい。これまでに他のフォーラム(stackoverflowを含む)を調べましたが、実行時に「コマンドテキストがコマンドオブジェクトに設定されていませんでした」というエラーがスローされ続けます(下に表示される行を強調表示しました)。わからないし、捨てられない。どんな助けでも大歓迎です。ありがとうK

private void btnOkay_Click(object sender, EventArgs e)
        {
            string connectionString = 
                "provider=Microsoft.ACE.Oledb.12.0;" +
                "data source=C:\\Users\\Documents\\StudentRegistrationDatabase.accdb";

        OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
        OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();

        string strSql = @"INSERT INTO StudentDetails ([Forename],[Surname],[CourseName],[DOB],)" + 

            "VALUES('"+txtFirstName.Text +"','" +txtLastName.Text +"','" +txtCourseName.Text +"','"+ txtDOB.Text +"')";


        myOleDbConnection.Open();
        OleDbCommand cmd = new OleDbCommand(strSql, myOleDbConnection);
        cmd.Parameters.AddWithValue("@Forename", txtFirstName);
        cmd.Parameters.AddWithValue("@Surname", txtLastName);
        cmd.Parameters.AddWithValue("@CourseName", txtCourseName);
        cmd.Parameters.AddWithValue("@DOB", txtDOB);

        **myOleDbCommand.ExecuteNonQuery();**   }

編集:返信ありがとうございます。この作品のコーディングを初めて開始したとき、次のコード行を使用しました。

'   {
            string connectionString = 
                "provider=Microsoft.ACE.Oledb.12.0;" +
                "data source=C:\\Users\\Botterill\\Documents\\StudentRegistrationDatabase.accdb";

            OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
            OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();
myOleDbConnection.Open();
            myOleDbCommand.CommandText = "INSERT INTO StudentDetails ([Forename],[Surname],[CourseName],[DOB],)" +

             "VALUES('" + txtFirstName.Text + "','" + txtLastName.Text + "','" + txtCourseName.Text + "','" + txtDOB.Text + "')";'
**myOleDbCommand.ExecuteNonQuery();**

しかし、太字の行で、「INSERT INTO ステートメントに構文エラーがある」という実行時エラーが発生していました。これは、投稿した最初の質問で行った変更で修正されると思いました。どんな助けでも大歓迎です。ありがとうケイト

4

1 に答える 1

3

接続から作成myOleDbCommandし、引き続きクエリ テキストを使用してインスタンスをセットアップし、コマンド テキストが添付されていないcmdインスタンスを実行します。myOleDbCommand

OleDbCommand本当に使用したいのはどのインスタンスですか?

さらに、@thorarin が指摘しているように、名前付きパラメーター (cmd例のように) を使用し、文字列を連結してコマンド テキストを作成しないでください。これは、SQL インジェクション攻撃のためにアプリケーションを開くためです。

于 2013-04-10T12:17:40.957 に答える