none
SQL Serverへのデータ追加について RRS feed

  • 質問

  • こんにちわ。

    SQL Serverへのデータ追加で悩んでいます。

     

    データ追加処理実行時にエラー
    名前"True"は、このコンテキストでは許可されません。有効な表記は定数、定数表記、および(コンテキストによっては)変数です。列名は許可されません。
    と出ます。

     

    テーブル内にbit型が存在するので確認した所、現在は以下の様に
    なっておりました。

     

    string myQuery = string.Format("INSERTO INTO DataTable (フラグ1,フラグ2)Values({1},{2});",CheckBox1.Checked,CheckBox2.Checked);


    またPage_Load時は
    CheckBox1.Checked = (Boolean)reader["フラグ"];


    という形でDBのデータを表示させる様にしているのですが
    こちらは問題ないようでした。

     

    mdbとは違うとは思うのですが色々試しても分かりませんでした。


    ご教示頂けますでしょうか?

    よろしくお願い致します。

     

     

    2008年3月26日 6:02

回答

  • reader["フラグ"]はobject型なので直接Booleanへキャストすることはできません。

     

     bool.Parse(reader["フラグ"].ToString()

     

     

    reader.GetBoolean(列のインデックス番号)

     

    とします。

    列のインデックス番号は、

    reader.GetOrdinary("フラグ")で求めることもできます。

     

    #えムナウさん、フォローありがとうございました。

    2008年3月27日 4:50
    モデレータ

すべての返信

  • 以下のようにしてみて下さい。

     

    string myQuery = string.Format("INSERTO INTO DataTable (フラグ1,フラグ2)Values({1},{2});",CheckBox1.Checked,CheckBox2.Checked ? 1 : 0);

    2008年3月26日 6:40
    モデレータ
  • 蛇足ですが2か所ある場合は2か所ともやってください。

     

    string myQuery = string.Format("INSERTO INTO DataTable (フラグ1,フラグ2)Values({1},{2});",CheckBox1 ? 1 : 0.Checked,CheckBox2.Checked ? 1 : 0);

    2008年3月26日 7:03
  • trapemiya さま

     

    いつもありがとうございます。

     

     trapemiya さんからの引用

    以下のようにしてみて下さい。

     

    string myQuery = string.Format("INSERTO INTO DataTable (フラグ1,フラグ2)Values({1},{2});",CheckBox1.Checked,CheckBox2.Checked ? 1 : 0);

     

    なるほど。

    確かにテーブルの中身は1 or 0 といった表記になっていました。

    この様に記述するのですね?

     

    大変、勉強になりました。

    ありがとうございました!

    2008年3月26日 10:30
  • えムナウ さま

     

    ありがとうございます。

     

     えムナウ さんからの引用

    蛇足ですが2か所ある場合は2か所ともやってください。

     

    string myQuery = string.Format("INSERTO INTO DataTable (フラグ1,フラグ2)Values({1},{2});",CheckBox1 ? 1 : 0.Checked,CheckBox2.Checked ? 1 : 0);

    1つずつ定義して行かなくてはいけなかったのですね。

     

    ちょっと勘違いして間違える所でした。

     

    大変助かり、勉強になりました。

     

    ありがとうございました!

    2008年3月26日 10:32
  • 何度もすみません。

     

    やはりCheckBox1.Checked = (Boolean)reader["フラグ"];

     

    だとエラーが出てしまいます。

     

    記述の追記が必要なのでしょうか?

     

    申し訳ありません。

    ご教示下さいませ。

    2008年3月27日 4:12
  • reader["フラグ"]はobject型なので直接Booleanへキャストすることはできません。

     

     bool.Parse(reader["フラグ"].ToString()

     

     

    reader.GetBoolean(列のインデックス番号)

     

    とします。

    列のインデックス番号は、

    reader.GetOrdinary("フラグ")で求めることもできます。

     

    #えムナウさん、フォローありがとうございました。

    2008年3月27日 4:50
    モデレータ
  • trapemiy さま

     

    度々のご教示ありがとうございます。

     

     trapemiya さんからの引用

    reader["フラグ"]はobject型なので直接Booleanへキャストすることはできません。

     

    この辺りのコーディングの方法が難しくて苦手です(^ ^Wink

     

     trapemiya さんからの引用

     bool.Parse(reader["フラグ"].ToString()

     

     

    reader.GetBoolean(列のインデックス番号)

     

    とします。

    列のインデックス番号は、

    reader.GetOrdinary("フラグ")で求めることもできます。

    記述は違う様に見えますが行っている処理は同じなんですね。

     

    早速、bool.Parse(reader["フラグ"].ToString());

     

    reader.GetBoolean(reader.GetOrdinary("フラグ"));

     

    として実行してみましたが同じエラーが出てしまいます。

     

    何か誤った点がありますでしょうか?

    調べてみても現在の事象に該当するものがありませんでした。

     

    すみません。

    よろしくお願い致します。

     

    2008年3月27日 5:29
  • おかしいですね。どのようなエラーが発生していますか?

     

    2008年3月27日 5:38
    モデレータ
  • trapemiya さま

     

    早速のご回答ありがとうございます。

     

     trapemiya さんからの引用

    どのようなエラーが発生していますか?

     

    例外の詳細:System.IndexOutOfRangeException:フラグ

     

    行 : CheckBox2.checked = reader.GetBoolean(reader.GetOridinal("フラグ"));

     

    となっています。

     

    お手数をおかけ致します。。。

    2008年3月27日 5:51
  • フラグという列名の列が存在しないとしか思えません。

    試しに、

    reader.GetBoolean(列のインデックス)

    のように、列のインデックスである数字を直接与えてみて下さい。

     

    2008年3月27日 6:04
    モデレータ
  • trapemiya さま

     

    すみません。

    自己解決です。。。

     

    表示SQL文に「フラグ」のカラムを指定していませんでした。。。

     

    エラーメッセージを書きながらもしやと思いみてみたところ

    カラムが抜けていました。

     

    表示はちゃんと実行されていました。

    本当にありあがとうございました。

     

    またお騒がせ致しました。。。

    2008年3月27日 6:04