- - PR -
XSDのキーの設定方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-01-27 11:11
ぷーちんです。いつもお世話になっております。
XSDのキーの事で教えてください。 XSDでキーを指定し、それから生成したデータセットにデータを追加する場合、 キー項目が一致するデータがあったればExceptionを発生させるようにしたい のですが、キーが同じデータを追加しても何も起きません。 XMLの設定方法に誤りがあるのか、元々Exceptionは発生しないのか がわかりません。 以下の手順でプログラムを作成しました。 1.XSDファイルを作成 2.XSDからデータセットを生成 3.Formのデザインで画面に2で作成したデータセットを追加 4.Formのボタンクリックで3で追加したデータセットにキー項目が 同じデータ2件を追加 <<Formのボタンクリック処理>> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Me.XmlSchema11.element1.Addelement1Row("111", "111") '最初のデータと全く同じデータを追加 Me.XmlSchema11.element1.Addelement1Row("111", "111") Catch ex As System.Exception System.Diagnostics.Debug.WriteLine(ex.ToString) End Try End Sub <<XMLSchema1のXML>> ※aaaをキー項目にしました。 <?xml version="1.0" encoding="utf-8" ?> <xs:schema id="XMLSchema2" targetNamespace="http://tempuri.org/XMLSchema2.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema2.xsd" xmlns:mstns="http://tempuri.org/XMLSchema2.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="element1"> <xs:complexType> <xs:sequence> <xs:element name="aaa" type="xs:string" /> <xs:element name="bbb" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:key name="element1Key1" msdata:PrimaryKey="true"> <xs:selector xpath="." /> <xs:field xpath="mstns:aaa" /> </xs:key> </xs:element> </xs:schema> 長くてすみません。よろしくお願い致します。 |
|
投稿日時: 2003-01-27 17:08
ぷーちんです。
データセットの項目の Unique を True にしたら一意制約のExceptionが発生しました。 このTrueを除いて出力に表示させたら、やはりFalseになっていました。 XSDスキーマで Key を設定してもデータセット作成時に Key でなくなってしまうようです。 どのようにすればXSDスキーマで設定した Key をデータセットにも有効にできるのでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try 'Me.XmlSchema11.element1.aaaColumn.Unique = True Me.XmlSchema11.element1.Addelement1Row("111", "111") Me.XmlSchema11.element1.Addelement1Row("111", "111") System.Diagnostics.Debug.WriteLine(CStr(Me.XmlSchema11.element1.aaaColumn.Unique)) System.Diagnostics.Debug.WriteLine(CStr(Me.XmlSchema11.element1.bbbColumn.Unique)) Catch ex As System.Exception System.Diagnostics.Debug.WriteLine(ex.ToString) End Try End Sub 引き続きよろしくお願い致します。 |
|
投稿日時: 2003-01-27 18:51
xsd.exeにはいろいろ厳しい規約があるようで、次のようにしないといけないようです。
<xs:element name="NewDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <!-- ここにぷーちんさんのelement1を挿入 ただしxs:key要素は除く --> </xs:choice> </xs:complexType> <!-- ここにkey要素を挿入 selector/@xpathに注意 --> <xs:key name="element1Key1" msdata:PrimaryKey="true"> <xs:selector xpath=".//mstns:element1" /> <xs:field xpath="mstns:aaa" /> </xs:key> </xs:element> |
|
投稿日時: 2003-01-27 20:45
ぷーちんです。お世話になっております。
NothingBut.NETFXさんの通りの書き方でXSDを作成したところ、 データセットのunique設定ができました。 データセットを編集する際、最初に element を配置し、その element の IsDataSet を true にしてから 各テーブル分の element を編集すれば良い みたいですね。 ただ、VB.NETのデータセット編集画面から下の設定をする方法はわかりませんでした。 <xs:choice maxOccurs="unbounded"> 編集画面だと choice の代わりに sequence になってしまいました。 <xs:sequence> 切り替え方はヘルプで見ましたが、Groupの方法しか見つけられなかったので、 XMLを開いてchoiceに変更しました。 sequence のままだと使い方がよくわかりません。 choice にすると私が書いたプログラムと同じ使い方ができました。 NothingBut.NETFXさん、どうもありがとうございました。 |
1