我只是尝试使用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,它的工作原理.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。