- - PR -
Dynamic SQLの生成に失敗しました
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-12-08 17:03
いつもお世話になってます。
VisualBasic.net/Oracle9i/El tabelle の環境で、ODPを用いてデータベースの操作をしようとしているのですが、 AdapterName.Update(UpDatedRows, TableName) を行うタイミングで、 「Dynamic SQLの生成に失敗しました。キー情報が見つかりません。」 というエラーが発生してしまいます。 Updateを実行する直前のUpDatedRows.HasErrorsの値を確認してみた ところ、Trueの値が入っていたので、なんらかのエラーが発生している ということは分かるのですが、上記エラー内容だけでは、何が原因 なのかを判断しかねております。 この部分を調べてみては?というような情報だけでも結構ですので、 ご教授願えませんでしょうか?よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2003-12-09 00:31
テーブルに主キーが設定されてないと、自動的に更新用の
SQLを生成することができない、というエラーなんじゃ ないんですか? | ||||||||||||
|
投稿日時: 2003-12-09 09:07
主キーも張ってみましたが、同様のエラーがでてしまいます。
また、主キーを設定していないテーブルでも、うまくいく場合も あります。(他の画面ですが、DB操作は同様の操作で行っています) | ||||||||||||
|
投稿日時: 2003-12-09 11:20
DataRow.HasErrorsが、Trueなんですね?では、DataRow.RowErrorには、何が入っていましたか?ここが、「Dynamic SQLの生成に失敗しました。キー情報が見つかりません。」となっていましたか? | ||||||||||||
|
投稿日時: 2003-12-09 11:55
Jittaさんのおっしゃるとおり、DataRow.RowErrorの値が「Dynamic SQLの生成に失敗しました。キー情報が見つかりません。」となっているところまでは確認済みです。 しかし、具体的にどの列のどの項目がどのようなエラーを起こしているのかという点を確かめる術を知らないので、その方法等をご教授頂ければと思って投稿させて頂きました。 お手数をおかけしますが、よろしくお願いします。 | ||||||||||||
|
投稿日時: 2003-12-09 13:47
DbDataAdapterの構成で、InsertCommandやUpdateCommand、DeleteCommandは自分で生成して設定しましたか?それとも、SelectCommandだけで、自動生成しようとしていますか?
自動生成しようとしている場合、SELECT文のFROM句には、テーブルをいくつ定義しましたか?1つの場合、そのテーブルのプライマリキーを持ってきていますか? あとは、Fillした後に、FillSchema(Fillはデータ、FillSchemaは定義情報を持ってくる)するとどうなりますか? | ||||||||||||
|
投稿日時: 2003-12-09 14:21
DataSet作成時にSelectCommandを設定しているだけで、その他は設定していません。
下記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" お手数をおかけしますが、よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2003-12-10 08:37
う〜ん??後は…ODP.NETですよねぇ。OleDbで同じことやるとどうなります?またはODP.NETでも、単純にFillしてUpdateかけると、どうなります?
MSDNを見る限り、DataTable.Constraintsに、UniqueConstraintがあれば大丈夫そうなんですが。または、PrimaryKeyが2列からできているようですが、それが原因なのかも。。。 |
1