欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

深入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会报编码错误异常。

上一篇:

下一篇: