- - PR -
データベースにチェックボックスの情報の追加の仕方
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-02-26 11:33
はじめましてイクザスさん。
昨日からいまだに格闘しております(笑)。 で、早速Parameterを使ってやってみたのですが 今度は違うエラーがでてしまい、エラーを見つけ られないでいます。 エラー Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.OleDb.OleDbException: Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'. Source Error: Line 142: //Fill data set Line 143: DataSet dataSet = new DataSet(); Line 144: ad.Fill(dataSet, "User"); Line 145: //PrintTable(dataSet); Line 146: ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー コード String strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + Request.PhysicalApplicationPath + "TRCIDB.mdb;Mode=ReadWrite|Share Deny None;"; String select = "SELECT UIdNum, Usename, Name, usrpwd, Admin FROM User"; //Create a connection OleDbConnection cn = new OleDbConnection(strConnect); cn.Open(); //Create an adapter OleDbDataAdapter ad = new OleDbDataAdapter(select, cn); //Build the insert command ad.InsertCommand = new OleDbCommand("INSERT INTO User" + "(Uername, Name, usrpwd, Admin)VALUES" + "(@Username, @Name, @usrpwd, @Admin)", cn); //System.Data.OleDb.OleDbCommand command = new OleDbCommand(select, new OleDbConnection(select)); //Build parameters for each column in User table OleDbParameter parameter = null; //Username parameter = ad.InsertCommand.Parameters.Add(new OleDbParameter("@Username", OleDbType.VarChar)); parameter.SourceColumn = "Username"; parameter.SourceVersion = DataRowVersion.Current; //Name parameter = ad.InsertCommand.Parameters.Add(new OleDbParameter("@Name", OleDbType.VarChar)); parameter.SourceColumn = "Name"; parameter.SourceVersion = DataRowVersion.Current; //Password parameter = ad.InsertCommand.Parameters.Add(new OleDbParameter("@usrpwd", OleDbType.VarChar)); parameter.SourceColumn = "usrpwd"; parameter.SourceVersion = DataRowVersion.Current; //Admin parameter = ad.InsertCommand.Parameters.Add(new OleDbParameter("@Admin", OleDbType.Boolean)); parameter.SourceColumn = "Admin"; parameter.SourceVersion = DataRowVersion.Current; //Fill data set DataSet dataSet = new DataSet(); ad.Fill(dataSet, "User"); //PrintTable(dataSet); //Add new row DataRow newRow = dataSet.Tables["User"].NewRow(); newRow["Usename"]=txtUsername.Text; newRow["Name"] = txtName.Text; newRow["usrpwd"]=txtPassword.Text; newRow["NAdmin"] = chkbxAdmin.Checked; dataSet.Tables["User"].Rows.Add(newRow); [ メッセージ編集済み 編集者: Oregonian 編集日時 2004-02-26 11:42 ] | ||||
|
投稿日時: 2004-02-26 13:32
SQL文が違う、というエラーが、DataAdapter.Fillメソッドででているのだから、SELECT文が間違っていると思われます。スペースが全角だったりしませんか? | ||||
|
投稿日時: 2004-02-26 13:47
私もあまり詳しくないので、見当違いならすいません。 Fillでデータを持ってくると思っていますので、DataAdapterのSelectCommandが使用されると思います。 InsertCommand以外のコマンド(SelectCommand、DeleteCommand、UpdateCommand)も 設定してみてください。 -------------------------------------------------------------------- デザイナで自動生成させると、そこら辺も作ってくれるんですけどねぇ・・・。 | ||||
|
投稿日時: 2004-02-26 14:04
追記
または、作成したOleDbCommandをExecuteNonQueryすることでInsertできませんか? ※ デザイナで作成したコマンドを基にOleDbCommandを作成して、ExecuteNonQueryすることで 私はACCESSのテーブルに追加することが出来ましたよ。 | ||||
|
投稿日時: 2004-02-26 14:36
>Jittaさん
スペースは調べてみましたがきちんと 半角になっていました。 前のコードも新しいコードもSQL文が おかしいのですかね? >イクザスさん 下ような感じでやってみました。 objCommand.CommandText = "INSERT INTO User( Username, Name, usrpwd, Admin ) values( '" + username + "','" + name + "','" + password + "'," + isAdmin + ")"; objCommand.ExecuteNonQuery(); しかし、これにすると前のコードと同じで objCommand.ExecuteNonQuery(); にエラーがで出ます。ExecuteNonQuery()を使った場合は テキストボックスだけだと値はAccessにInsertできるのですが、 チェックボックスの値(TrueかFalse)をいれようとすると エラーになります。 そこで思ったのが、ExecuteNonQuery()はStringしかできない のかと・・・。コンパイルエラーはでないんですけどね。 ほんとわかりません。 | ||||
|
投稿日時: 2004-02-26 15:02
Parametersと組み合わせでも出来ませんか?
私は下記のコードでチェックボックスの値をInsert出来ましたよ。
※コネクションはデザイナを使用して作成しています。 細かい設定などの説明は省きますが、この生産中止の部分がACCESSでBooleanに設定されています。 ------------------------------------------------------------------------------ 追記 私もまだまだ勉強中な為、CommandTextとParametersの書き方にはもっといい方法が 有るかもしれません。 [ メッセージ編集済み 編集者: イクザス 編集日時 2004-02-26 15:07 ] | ||||
|
投稿日時: 2004-02-26 15:04
もし可能であれば、
Userテーブルの「Admin」列名を変えてみてはどうでしょうか? #Adminという名称が予約語っぽいと思ったので。。。 _________________ まゆりん @ わんくま同盟 Blog る。 | ||||
|
投稿日時: 2004-02-26 15:37
NAL-6295です。 SELECT文がUsenameで、INSERT文がUernameになっている。 つまり、項目名の記述ミス。 ってことは無いですか? ただの転記ミスであればすいません。 |