Lak*_*ore 7 c# xml stored-procedures sql-server-2008
我只是尝试使用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();
Run Code Online (Sandbox Code Playgroud)
您需要将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);
Run Code Online (Sandbox Code Playgroud)
将它转换为字符串是不够的.我收到以下错误:XML解析:第1行,第38个字符,无法切换编码".所以,我转换为字符串,然后将其转换为SqlXml,它的工作原理.
| 归档时间: |
|
| 查看次数: |
31673 次 |
| 最近记录: |