• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Column名を変えた時のUpdate文の書き方)

Column名を変えた時のUpdate文の書き方

このQ&Aのポイント
  • VB2010とSQLServer2008でデータベースの勉強をしております。DataAdapterを使用し、SelectCommand,UpdateCommandを設定、それをDataGridViewに表示させています。
  • Column名とデータをSelectCommandで変更し、Update文でCASE文を使用したい場合、どのように書けばよいのでしょうか?
  • Select文、Update文ともに、CASE句を削除すれば正しく動作することは確認できました。

質問者が選んだベストアンサー

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

実は手元に開発環境が無いから適当な回答なんだけど。。。 普通に考えれば分かる範囲で、 ┏━━データベース━━━┓┏━━━データソース━━━━━┓                     文字列   文字列   数値 >UPDATE Test3 SET Sex = CASE @sex WHEN '男' THEN 1  [データベースの Sex(数値)] ← [データソースの比較処理(文字列)で決めた値(数値)] なんでしょ?あくまで @sex はローカルのデータソースのデータが入る んだから、実際のテーブルのデータ型と一致する必要がないでしょう? SQL の世界で言えばサブクエリのようなもの?関係ないでしょう? "sex" とか使うから分かり難いのでは?完全に別物なんだから UPDATE Test1 SET Sex = CASE @seibetu WHEN '男' THEN 1                         WHEN '女' THEN 2                         ELSE 0                 END WHERE No = @suuti くらいのほうが分かり易いのかも? データベースが処理するのか、VB側で用意したデータの都合なのかを そのまま考えれば、おのずと答えは出そうなもんだけど? で、パラメータは、SQL の処理に使われるデータソースの話だから、 男、女のデータを入れて渡すんわけで、VB側のデータソースの設定として 普通に考えれば、 SQLDataAapter.UpdateCommand = New SqlCommand(SQL, myConnection) SQLDataAapter.UpdateCommand.Parameters.Add("@seibetu", SqlDbType.NText , 32, "性別") SQLDataAapter.UpdateCommand.Parameters.Add("@suuti", SqlDbType.Int, 32, "No") とかでいいのでは?

hanahana_0
質問者

お礼

ご回答ありがとうございます。 ご指摘頂きました文、 SQLDataAapter.UpdateCommand.Parameters.Add("@seibetu", SqlDbType.NChar , 1, "性別") を追加し、解決できました。 今までは1行ずつUPDATE文を発行していたので、大幅にコードを減らす事が出来ました。 ありがとうございました!

その他の回答 (2)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.3

1文字しか入らないのであれば、固定長でサイズ指定でいいのかな? SQLDataAapter.UpdateCommand.Parameters.Add("@seibetu", SqlDbType.NChar , 1, "性別") この辺は調べてみて下さい。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

質問を読んでいると、データを男、女に変えたことの質問に聞こえる んだけど、SqlParameter とデータテーブルの Column名 の結び付けの 質問ですか?CASE 文も実は関係ない話なのでは? プログラムは1つ1つ単純作業の積み重ねなので、もっと切り分けて下さい。 ・Column名を Sex のままで、データも 1, 2 のままで成功する事は確認済み。 > なお、Select文、Update文ともに、「CASE」句を削除すれば正しく動作する > ことは確認できました。 ・Column名を Sex のままで、データを 男, 女にして CASE 文の実行確認は? ↑成功すれば、CASE 文自体は問題ないので質問の内容から外せます。 ・Column名 の結び付けの質問なら、データは単純なもので質問する。 テーブル名も Test1 で統一する。 データベース Test1 No Sex ------ 1 1 2 2 3 0 DataGridViewの表示 No 性別 ------- 1 1 2 2 3 0 検索時に Column名に別名をつけた場合、UpdateCommand でデータテーブルの列"性別" と、実際のテーブルの列"Sex"を結びつける方法を教えて下さい。 SQL = "UPDATE Test1 SET Sex = @sex WHERE No = @no" SQLDataAapter.UpdateCommand = New SqlCommand(SQL, myConnection) SQLDataAapter.UpdateCommand.Parameters.Add("@sex", SqlDbType.Int, 32, "Sex") SQLDataAapter.UpdateCommand.Parameters.Add("@no", SqlDbType.Int, 32, "No") ・・・とか? で、 SQLDataAapter.UpdateCommand.Parameters.Add("@sex", SqlDbType.Int, 32, "Sex") を書いている時点で気付いて欲しいんだけど、 http://msdn.microsoft.com/ja-jp/library/f38c3x2s(v=VS.100).aspx 第4引数:ソース列の名前を"性別"にすればいいのでは? SQL 文はデータベースに丸投げされて、データベースが解釈しますから、別名を 付けられた情報など渡されてもどうにもできません。つまり、SQL 文上で"性別"の 指定は必要ないはずですよね?VB側の設定です。

hanahana_0
質問者

補足

ご回答ありがとうございます! > プログラムは1つ1つ単純作業の積み重ねなので、もっと切り分けて下さい。 おっしゃるお通りです。申し訳ありません… ご指摘頂いた通り、私の質問はいくつもの問題を盛り込みすぎていました。 「SqlParameter とデータテーブルの Column名 の結び付けの問題」は解決できました。 SQL = "SELECT No, Sex AS 性別 FROM Test1 " ↓ SQL = "UPDATE Test1 SET Sex = @sex WHERE No = @no " SQLDataAapter.UpdateCommand = New SqlCommand(SQL, myConnection) SQLDataAapter.UpdateCommand.Parameters.Add("@sex", SqlDbType.Int, 32, "性別") SQLDataAapter.UpdateCommand.Parameters.Add("@no", SqlDbType.Int, 32, "No") ご指摘頂きました通り、"Sex"→"性別"にすることで更新が出来ました。 > 質問を読んでいると、データを男、女に変えたことの質問に聞こえる > んだけど、 一番お聞きしたいことはそこです! データの表示を「男・女・?」に変えたときのUPDATE方法がわかりません。 データの表示をINT→文字に変えたのですから、UPDATEの際は文字→INTにしなければならない。 そこで、UPDATE文の中でCASEを使えばいいのでは?と勝手に思った次第です。 それをどこで処理すべきなのでしょうか? ご指導のほど、よろしくお願い致します

関連するQ&A