深入C#中使用SqlDbType.Xml类型参数的使用详解
程序员文章站
2023-12-20 14:47:25
在sql server2005以及之后的sql server中引入了xml数据类型,在c#中使用xml数据类型需要指定参数类型为sqldbtype,参数值类型需要用sqlx...
在sql server2005以及之后的sql server中引入了xml数据类型,在c#中使用xml数据类型需要指定参数类型为sqldbtype,参数值类型需要用sqlxml,如下示例:
假定有一种表a,a表有两个字段:id 类型 int,data 类型 xml,我要用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会报编码错误异常。
假定有一种表a,a表有两个字段:id 类型 int,data 类型 xml,我要用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会报编码错误异常。