当前位置: 首页 > 编程语言 > C#

使用XML数据类型共享调用存储过程

时间:2023-04-10 12:57:04 C#

使用XML数据类型调用存储过程我刚刚尝试使用C#调用存储过程(SQLServer2008)并将XMLDocument传递给采用SqlDbType.Xml数据类型参数的存储过程。我收到错误:无法将参数值从XmlDocument转换为字符串。下面是一个代码示例。如何将XML文档传递给需要XML数据类型的存储过程?谢谢。XmlDocumentdoc=newXmlDocument();//加载带有最后一本书节点的文档。XmlTextReaderreader=newXmlTextReader(@"C:temp"+uploadFileName);读者。阅读();//加载阅读器doc.Load(reader);connection.Open();SqlCommandcmd=newSqlCommand("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="替换";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;命令。Parameters.Add("@AddBy",SqlDbType.VarChar);cmd.Parameters["@AddBy"].Value=Page.User.Identity.Name;cmd.ExecuteNonQuery();connection.Close();您需要将xmlPass作为字符串但是,如果您不需要数据库中的xml函数,您可以考虑使用varbinary来存储文件。更新!!!!!谢谢。我让它工作了。添加了以下编码:StringWritersw=newStringWriter();XmlTextWriterxw=newXmlTextWriter(sw);doc.WriteTo(xw);StringReadertransactionXml=newStringReader(sw.ToString());XmlTextReaderxmlReader=newXmlTextReader(transactionXml);SqlXmlsqlXml=newSqlXml(xmlReader);将其转换为字符串是不够的。我收到以下错误:XML解析:第1行,字符38,无法切换编码”。因此,我将其转换为String,然后将其转换为SqlXml,并且成功了。要使用XDocument、XElement或其他XNode执行此操作,请尝试以下操作:XDocumentdoc=newXDocument(newXElement("Person",newXAttribute("Name","John")));cmd.Parameters.Add("@FileContent",SqlDbType.Xml);cmd.Parameters["@FileContent"].Value=newSqlXml(doc.CreateReader());如果您不介意丢失xml声明(版本和编码),另一种方法是:XML.DocumentElement.OuterXml'其中XML是XMLDocument您可以以更简单的方式添加参数,这样我们就不必传递对象输入参数sql将其作为传递值进行管理SqlXmlsqlXml=newSqlXml(xmlReader);cmd.Parameters.AddWithValue("@FileContent"],strxml);另一种更简单的方法是将xmldoc写入字符串并将其传递给存储过程。将sb变暗为新的StringBuilder()将wrtr变暗为新的System.IO.StringWriter(sb)doc.Save(wrtr)将strxml变暗为String=sb.ToString()cmd.Parameters.Add("@FileContent",SqlDbType.Xml);cmd.Parameters["@FileContent"].Value=strxml;在.NETFramework4.5.2中,我能够使用以下简单代码传递System.Xml.XmlDocument(变量名称“xdoc”)对象::使用XML数据类型调用存储过程以共享所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—XmlTextReaderxreader=newXmlTextReader(newStringReader(xdoc.OuterXml));cmd.Parameters.Add(newSqlParameter("@xmlOptions",newSqlXml(xreader)));publicstaticstringSerializeToXml(Tobj){XmlSerializerNamespacesns=newXmlSerializerNamespaces();ns.Add("","");StringWriterOutput=newStringWriter(newStringBuilder());XmlSerializerser=newXmlSerializer(obj.GetType);ser.Serialize(Output,obj,ns);返回Output.ToString();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: