SQLParameterを使用してXMLタイプの列に格納しようとすると、SQLParameterに問題が発生します。SqlDbType.Xmlのパラメーターを作成しています。空白のみのXML要素は閉じた要素に変換されているようです。
これはと同じ動作です
SELECT CAST('<Cust><Fname>Andrew</Fname><Lname> </Lname></Cust>' as XML)
VS
SELECT CONVERT(xml, '<Cust><Fname>Andrew</Fname><Lname> </Lname></Cust>', 1)
これがSQLParameter内のデフォルトの動作であることに驚いています。SqlDbType.XmlのSQLParameterに空白を気にする方法はありますか?暗闇の中でのショットとして、Precisionを1に設定しようとしましたが、それは役に立ちませんでした...
以下のコードは、データベースでこれで終わります
<Cust><Fname>Andrew</Fname><Lname /></Cust>
ご覧のとおり、空白のXML要素が削除されています
// CREATE TABLE T(c1 int primary key, c2 xml)
static void Main(string[] args) {
using (var Connection = new System.Data.SqlClient.SqlConnection("Data Source=localhost;Initial Catalog=Test;Integrated Security=SSPI;"))
{
Connection.Open();
using (var Command = Connection.CreateCommand())
{
Command.CommandText = "INSERT INTO T VALUES (1, @s)";
var XmlParameter = Command.Parameters.Add("s", System.Data.SqlDbType.Xml);
XmlParameter.Value = "<Cust><Fname>Andrew</Fname><Lname> </Lname></Cust>";
Command.ExecuteNonQuery();
}
Connection.Close();
}
パラメータをバイナリとして解析し、挿入/更新コマンドの一部として変換しない、それを解決する方法を知っている人はいますか?
Command.CommandText = "INSERT INTO T VALUES (1, CONVERT(xml, @s, 1))";
ヘルプやフィードバックをいただければ幸いです。