C#に深く入り込むSqlDbTypeを使用する.Xmlタイプパラメータの使用の詳細
2004 ワード
Xmlデータ型はsql server 2005以降のsql serverに導入されており、C#でXmlデータ型を使用するにはSqlDbTypeとして指定する必要があり、パラメータ値タイプはSqlXmlとする必要があり、以下の例を示す.
IDタイプint、DataタイプXmlの2つのフィールドがあるとします.C#でテーブルにレコードを挿入します.
データを挿入する場合はSqlXmlデータ型をパラメータ値とする必要がありますが、Xmlタイプデータを読み出す場合のC#データ型はstringです.次の例を示します.
なお、Xmlフィールドのパラメータ値タイプは、データ挿入時にstringにすることはできません.stringを直接使用すると、符号化エラー異常が報告されます.
IDタイプint、DataタイプXmlの2つのフィールドがあるとします.C#でテーブルにレコードを挿入します.
static void InsertA(int aid, string contentXml)
{
//ConnString ,
using (SqlConnection conn = new SqlConnection(ConnString))
{
conn.Open();
string sql = "INSERT INTO [A] ([ID],[Content])VALUES(@id,@content)";
using (SqlCommand comm = new SqlCommand(sql, conn))
{
using (XmlTextReader rdr = new XmlTextReader(contentXml, XmlNodeType.Document, null))
{
SqlXml sqlXml = new SqlXml(rdr);
SqlParameter parmID = new SqlParameter("@id", aid);
SqlParameter parmContent = new SqlParameter("@content", SqlDbType.Xml, sqlXml.Value.Length);
parmContent.Value = sqlXml;
comm.Parameters.Add(parmID);
comm.Parameters.Add(parmContent);
comm.ExecuteNonQuery();
}
}
conn.Close();
}
}
データを挿入する場合はSqlXmlデータ型をパラメータ値とする必要がありますが、Xmlタイプデータを読み出す場合のC#データ型はstringです.次の例を示します.
string GetContent(int id)
{
string sql = "SELECT [Content] FROM [A] WHERE [ID] = " + id;
using (SqlConnection conn = new SqlConnection(ConnString))
{
conn.Open();
using (SqlCommand comm = new SqlCommand(sql,conn))
{
string xml = (string)comm.ExecuteScalar();
return xml;
}
}
}
なお、Xmlフィールドのパラメータ値タイプは、データ挿入時にstringにすることはできません.stringを直接使用すると、符号化エラー異常が報告されます.