C#に深く入り込むSqlDbTypeを使用する.Xmlタイプパラメータの使用の詳細

2004 ワード

Xmlデータ型はsql server 2005以降のsql serverに導入されており、C#でXmlデータ型を使用するにはSqlDbTypeとして指定する必要があり、パラメータ値タイプはSqlXmlとする必要があり、以下の例を示す.
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を直接使用すると、符号化エラー異常が報告されます.