【问题标题】:Error while inserting XML data through stored procedure通过存储过程插入 XML 数据时出错
【发布时间】:2012-02-02 11:22:26
【问题描述】:

我在 SQL Server 2005 中有一个列的数据类型为 xml 的表。我创建了一个存储过程来将值插入该列。

但是当从 C# 中的代码调用 SP 时,它给了我一个错误

无法将参数值从 XDocument 转换为字符串。

有人可以帮忙吗?

这是我创建的存储过程:

Create Procedure [dbo].[TestReportRepository_Save]
@ReportExecutionTime datetime,
@ReportFile xml,

as
begin

insert into TestReportRepository(ReportExecutionTime,ReportFile) values(@ReportExecutionTime,@ReportFile)

end

C#代码是

DbParameter dbParam1 = dac.Parameter("@ReportExecutionTime", ReportExecutionTime, DbType.DateTime, ParameterDirection.Input);
DbParameter dbParam2 = dac.Parameter("@ReportFile", xmlDoc.Document, DbType.Xml, ParameterDirection.Input);

DbParameter[] dbParamColl = new DbParameter[] { dbParam1, dbParam2 };
long reportID = dac.Save("TestReportRepository_save", dbParamColl);

请帮我找出我做错了什么。

【问题讨论】:

  • 如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行,然后单击编辑器上的“代码示例”按钮 ({ })工具栏以很好地格式化和语法突出显示它!
  • 您在 C# 代码中的哪个位置提供参数值?我不这么认为。基本上 - SQL Server 的 XML 类型是一个美化的字符串 - 它不能直接处理 XDocument - 您必须将 XDocument “序列化”为字符串以将其传递给 SQL Server(例如使用 @987654327 @方法)
  • 谢谢@marc_s:我会在发布任何新问题时牢记您的建议。也感谢它制定的解决方案。

标签: c# xml sql-server-2005


【解决方案1】:

传递此参数时 - 传递的不是 XDocument 对象,而是它的字符串表示形式。

对于 XmlDocument 它是 XmlDocument.OuterXml,为 XDocument 找到一个并传递它

【讨论】:

  • @mark_s 对不起,我在写答案时没有注意到你的评论,如果你认为这是一个代表嫖娼 - 我会删除答案
  • 不用担心 :-) 我只是不想将其扩展为“真实”答案 - 你做到了 - 你的努力值得称赞!
  • @OlegDok 您身边的有用信息。感谢您的帮助。
猜你喜欢
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多