1

エラーが発生しました:

文字列型やバイナリは省略されます。ステートメントは終了されました。

XElementLinq-to-SQL を介して C# からSQL Server 2012Xml列にデータを挿入すると、エラーが発生していました。

Profiler やその他のツールを実行した後、XML の属性の 1 つがエラーの原因であることがわかりました。

私はC#コードでこれを使用していました:

XmlDocument.SchemaVersion = System.Reflection.Assembly.GetAssembly(typeof(Data.Schema.Document)).GetName().Version.ToString();

これにより、次のような出力が得られるはずです

<tst:Root xmlns:tst="http://tempuri.org/some.xsd" SchemaVersion="0.2.1234.12345" RevNumber="1">
...
...
</tst:Root>

しかし、それはエラーをスローさせていますが、これは:

SchemaVersion="3"またはSchemaVersion"0.2.123.1"、次のようにテストすると正常に動作します。

XmlDocument.SchemaVersion = "0.2.123.1"

エラーを強制する SQL Server の XML 列にSchemaCollectionがありません。

SQL Server は何らかの方法でSchemaVersion属性をユーザー定義なしで特定の長さに強制しますか? または、使用していた C# ステートメントがエラーを引き起こすのはなぜですか?

編集:

手動でテストするときに失敗して機能するサンプル Sql を追加しました

失敗:

Insert into XmlTable(XmlId, XmlColumn)
Values('1', '<tst:Root xmlns:tst="http://tempuri.org/some.xsd" SchemaVersion="0.2.1234.12345" RevisionNumber="1" />')

作品:

Insert into XmlTable(XmlId, XmlColumn)
Values('1', '<tst:Root xmlns:tst="http://tempuri.org/some.xsd" SchemaVersion="0.2.1234.1" RevisionNumber="1" />')
4

1 に答える 1