加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用XML数据类型调用存储过程

发布时间:2020-12-15 18:02:25 所属栏目:百科 来源:网络整理
导读:我只是尝试使用C#调用存储过程(SQL Server 2008)并将 XMLDocument传递给采用SqlDbType.Xml数据类型的存储过程参数.我收到错误:无法将参数值从XmlDocument转换为String.下面是代码示例.如何将XML文档传递给期望XML数据类型的存储过程?谢谢. XmlDocument doc
我只是尝试使用C#调用存储过程(SQL Server 2008)并将 XMLDocument传递给采用SqlDbType.Xml数据类型的存储过程参数.我收到错误:无法将参数值从XmlDocument转换为String.下面是代码示例.如何将XML文档传递给期望XML数据类型的存储过程?谢谢.
XmlDocument doc = new XmlDocument();
        //Load the the document with the last book node.
        XmlTextReader reader = new XmlTextReader(@"C:temp" + uploadFileName);
        reader.Read();
        // load reader 
        doc.Load(reader);

        connection.Open();

        SqlCommand cmd = new SqlCommand("UploadXMLDoc",connection);

        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@Year",SqlDbType.Int);
        cmd.Parameters["@Year"].Value = iYear;
        cmd.Parameters.Add("@Quarter",SqlDbType.Int);
        cmd.Parameters["@Quarter"].Value = iQuarter;
        cmd.Parameters.Add("@CompanyID",SqlDbType.Int);
        cmd.Parameters["@CompanyID"].Value = iOrganizationID;
        cmd.Parameters.Add("@FileType",SqlDbType.VarChar);
        cmd.Parameters["@FileType"].Value = "Replace";
        cmd.Parameters.Add("@FileContent",SqlDbType.Xml);
        cmd.Parameters["@FileContent"].Value = doc;
        cmd.Parameters.Add("@FileName",SqlDbType.VarChar);
        cmd.Parameters["@FileName"].Value = uploadFileName;
        cmd.Parameters.Add("@Description",SqlDbType.VarChar);
        cmd.Parameters["@Description"].Value = lblDocDesc.Text;
        cmd.Parameters.Add("@Success",SqlDbType.Bit);
        cmd.Parameters["@Success"].Value = false;
        cmd.Parameters.Add("@AddBy",SqlDbType.VarChar);
        cmd.Parameters["@AddBy"].Value = Page.User.Identity.Name;

        cmd.ExecuteNonQuery();
        connection.Close();

解决方法

您需要将xml作为字符串传递.

但是,如果您不需要数据库中的xml函数,则可以考虑使用varbinary来存储文件.

UPDATE !!!!!

谢谢.我得到了它的工作.添加了以下编码:

StringWriter sw = new StringWriter(); 
XmlTextWriter xw = new XmlTextWriter(sw); 
doc.WriteTo(xw); 
StringReader transactionXml = new StringReader(sw.ToString()); 
XmlTextReader xmlReader = new XmlTextReader(transactionXml); 
SqlXml sqlXml = new SqlXml(xmlReader);

将它转换为字符串是不够的.我收到以下错误:XML解析:第1行,第38个字符,无法切换编码“.所以,我转换为字符串,然后将其转换为SqlXml,它的工作原理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读