|
■No84424 (なと さん) に返信 > 2.xsdのTableAdapterに上記と同じく「氏名」列を生成させたいのですが、下記のSQL文ではエラーが出てしまいます。 > SELECT ID, CONCAT(TBL社員情報.姓, TBL社員情報.名) AS 氏名 > FROM TBL社員情報 > 正しい構文を教えていただけないでしょうか。
手元の環境では、CONCAT 関数でも正常に TableAdapter が生成されました。 (System.Data.SqlClient での接続)
とはいえ、SQL としては正しいのに、TableAdapter で構成しようとすると 解析されずにエラーになってしまうケースがあることは何度か経験しています。 (特に、SQL Server 以外のデータベース製品を用いる場合に顕著ですが…)
以下、対処療法として。
===== A案 =====
(1) 「SELECT ID, 'DummyText' AS 氏名 FROM TBL社員情報」などとして、列名だけを合致させた、仮の TableAdapter を構築する。
(2) 構成された DataTable の「氏名」列の型(DataType)と長さ(MaxLength)を正しいものに修正する。
(3) 本来の(正しい) SQL を加工し、改行を含めない 1 行のテキストにまとめ、その文字列をクリップボードにコピーしておく。 たとえば、次のような SQL 文にする。 「SELECT ID, CONCAT(TBL社員情報.姓, TBL社員情報.名) AS 氏名 FROM TBL社員情報」
(4) TableAdapter の SelectCommand.CommandText プロパティの欄をダブルクリックして全選択し、(3)の単一行 SQL をクリップボードから貼り付けて上書きする。
(5)このとき、以下のメッセージが表示されるので、[はい]か[いいえ]を選択する。 『新しいコマンド テキストに基づいて更新コマンドをもう一度生成しますか? (現在の更新コマンドは上書きされます)』
(6)スキーマ更新失敗のエラーが表示される場合があるが、スキーマは(2)で構築済みなので無視する。 『CommandText を更新できませんでした: 新しいコマンドによって返されたデータのスキーマを取得できませんでした。 テーブル "TBL社員情報" のスキーマは変更されませんでした。 コマンドによって取得されたデータを反映できない可能性があります。』
(7)これで完成。念のため、InsertCommand/UpdateCommand/DeleteCommand の CommandText および Parameters を確認しておくこと。
===== B案 =====
A案 でもうまくいかない場合(TableAdapter 構成ウィザードすら起動しないようなケース)に限り、 最後の手段として、データセットの手動生成を試みる。
ソリューション エクスプローラーで DataSet1.xsd を右クリックして [ファイルを開くアプリケーションの選択]から、 「XML (テキスト) エディター」を選択して生の XSD データを直接加工する。
※念のため、修正前のファイルもバックアップしておく。
|