@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Dynamic SQLの生成に失敗しました

1
投稿者投稿内容
Prous
会議室デビュー日: 2003/12/08
投稿数: 4
投稿日時: 2003-12-08 17:03
いつもお世話になってます。

VisualBasic.net/Oracle9i/El tabelle
の環境で、ODPを用いてデータベースの操作をしようとしているのですが、

AdapterName.Update(UpDatedRows, TableName)

を行うタイミングで、
「Dynamic SQLの生成に失敗しました。キー情報が見つかりません。」
というエラーが発生してしまいます。

Updateを実行する直前のUpDatedRows.HasErrorsの値を確認してみた
ところ、Trueの値が入っていたので、なんらかのエラーが発生している
ということは分かるのですが、上記エラー内容だけでは、何が原因
なのかを判断しかねております。

この部分を調べてみては?というような情報だけでも結構ですので、
ご教授願えませんでしょうか?よろしくお願い致します。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-12-09 00:31
テーブルに主キーが設定されてないと、自動的に更新用の
SQLを生成することができない、というエラーなんじゃ
ないんですか?

Prous
会議室デビュー日: 2003/12/08
投稿数: 4
投稿日時: 2003-12-09 09:07
主キーも張ってみましたが、同様のエラーがでてしまいます。
また、主キーを設定していないテーブルでも、うまくいく場合も
あります。(他の画面ですが、DB操作は同様の操作で行っています)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-09 11:20
引用:

Prousさんの書き込み (2003-12-08 17:03) より:

Updateを実行する直前のUpDatedRows.HasErrorsの値を確認してみた
ところ、Trueの値が入っていたので、なんらかのエラーが発生している


 DataRow.HasErrorsが、Trueなんですね?では、DataRow.RowErrorには、何が入っていましたか?ここが、「Dynamic SQLの生成に失敗しました。キー情報が見つかりません。」となっていましたか?
Prous
会議室デビュー日: 2003/12/08
投稿数: 4
投稿日時: 2003-12-09 11:55
引用:

 DataRow.HasErrorsが、Trueなんですね?では、DataRow.RowErrorには、何が入っていましたか?ここが、「Dynamic SQLの生成に失敗しました。キー情報が見つかりません。」となっていましたか?


Jittaさんのおっしゃるとおり、DataRow.RowErrorの値が「Dynamic SQLの生成に失敗しました。キー情報が見つかりません。」となっているところまでは確認済みです。

しかし、具体的にどの列のどの項目がどのようなエラーを起こしているのかという点を確かめる術を知らないので、その方法等をご教授頂ければと思って投稿させて頂きました。
お手数をおかけしますが、よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-09 13:47
 DbDataAdapterの構成で、InsertCommandやUpdateCommand、DeleteCommandは自分で生成して設定しましたか?それとも、SelectCommandだけで、自動生成しようとしていますか?

 自動生成しようとしている場合、SELECT文のFROM句には、テーブルをいくつ定義しましたか?1つの場合、そのテーブルのプライマリキーを持ってきていますか?


 あとは、Fillした後に、FillSchema(Fillはデータ、FillSchemaは定義情報を持ってくる)するとどうなりますか?
Prous
会議室デビュー日: 2003/12/08
投稿数: 4
投稿日時: 2003-12-09 14:21
引用:

 DbDataAdapterの構成で、InsertCommandやUpdateCommand、DeleteCommandは自分で生成して設定しましたか?それとも、SelectCommandだけで、自動生成しようとしていますか?


DataSet作成時にSelectCommandを設定しているだけで、その他は設定していません。

引用:

 自動生成しようとしている場合、SELECT文のFROM句には、テーブルをいくつ定義しましたか?1つの場合、そのテーブルのプライマリキーを持ってきていますか?


下記FillSchemaの結果の通り、テーブル一つで、プライマリーキーも持っています。

引用:

 あとは、Fillした後に、FillSchema(Fillはデータ、FillSchemaは定義情報を持ってくる)するとどうなりますか?


結果は以下の通りとなりました。この時点ではエラーは発生していないようです。。。

>AdapterName.FillSchema(DataTable,SchemaType.Source)

{System.Data.DataTable}
CaseSensitive: False
ChildRelations: {System.Data.DataRelationCollection.DataTableRelationCollection}
Columns: {System.Data.DataColumnCollection}
Constraints: {System.Data.ConstraintCollection}
Container: Nothing
DataSet: {System.Data.DataSet}
DefaultView: {System.Data.DataView}
DesignMode: False
DisplayExpression: ""
ExtendedProperties: {System.Data.PropertyCollection}
HasErrors: False
Locale: {System.Globalization.CultureInfo}
MinimumCapacity: 50
Namespace: ""
ParentRelations: {System.Data.DataRelationCollection.DataTableRelationCollection}
Prefix: ""
PrimaryKey: {Length=2}
Rows: {System.Data.DataRowCollection}
Site: Nothing
TableName: "TableName"

お手数をおかけしますが、よろしくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-10 08:37
 う〜ん??後は…ODP.NETですよねぇ。OleDbで同じことやるとどうなります?またはODP.NETでも、単純にFillしてUpdateかけると、どうなります?

 MSDNを見る限り、DataTable.Constraintsに、UniqueConstraintがあれば大丈夫そうなんですが。または、PrimaryKeyが2列からできているようですが、それが原因なのかも。。。
1

スキルアップ/キャリアアップ(JOB@IT)