在sql server2005以及之后的sql server中引入了xml數據類型,在C#中使用Xml數據類型需要指定參數類型為SqlDbType,參數值類型需要用SqlXml,如下示例:
假定有一種表A,A表有兩個字段:ID 類型 int,Data 類型 Xml,我要用C#往表中插入一行記錄:
view sourcePRint?01 static void InsertA(int aid, string contentXml)
02 {
03 //ConnString是連接字符串,需要額外定義
04 using (SqlConnection conn = new SqlConnection(ConnString))
05 {
06 conn.Open();
07 string sql = "INSERT INTO [A] ([ID],[Content])VALUES(@id,@content)";
08 using (SqlCommand comm = new SqlCommand(sql, conn))
09 {
10 using (XmlTextReader rdr = new XmlTextReader(contentXml, XmlNodeType.Document, null))
11 {
12 SqlXml sqlXml = new SqlXml(rdr);
13
14 SqlParameter parmID = new SqlParameter("@id", aid);
15 SqlParameter parmContent = new SqlParameter("@content", SqlDbType.Xml, sqlXml.Value.Length);
16 parmContent.Value = sqlXml;
17
18 comm.Parameters.Add(parmID);
19 comm.Parameters.Add(parmContent);
20 comm.ExecuteNonQuery();
21 }
22 }
23 conn.Close();
24 }
25 }
插入數據時需要用SqlXml數據類型作為參數值,但讀出Xml類型數據時的C#數據類型是string。如下示例:
view sourceprint?01 string GetContent(int id)
02 {
03 string sql = "SELECT [Content] FROM [A] WHERE [ID] = " + id;
04
05 using (SqlConnection conn = new SqlConnection(ConnString))
06 {
07 conn.Open();
08 using (SqlCommand comm = new SqlCommand(sql,conn))
09 {
10 string xml = (string)comm.ExecuteScalar();
11 return xml;
12 }
13 }
14 }
需要注意的是,在插入數據時Xml字段的參數值類型不可以為string,直接用string會報編碼錯誤異常。
新聞熱點
疑難解答