【问题标题】:Using OpenRowSet with parametized file names使用带有参数化文件名的 OpenRowSet
【发布时间】:2017-01-20 05:51:57
【问题描述】:

我正在尝试从给定位置提取 XML 文件,但是我将在 C# 中获取该特定位置并需要将其传递到 sql 脚本中。

这是我当前代码的 sn-p:

CREATE TABLE XMLwithOpenXML
(
Id INT IDENTITY PRIMARY KEY,
XMLData XML,
LoadedDateTime DATETIME
)

DECLARE @filePath nvarchar(256) 

INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK 'C:\BimlFlex\BimlFlex.DatabaseContents.xml', SINGLE_BLOB) AS x;

显然我想用@filepath(或?)替换硬编码路径,但是当我这样做时,它说它需要一个字符串或一个text_lex。

然后在 c# 中我希望做类似的事情:

using (var cmd = new SqlCommand(...))
{
   cmd.Parameters.Add(new SqlServerParameter(0, "actual path from unzipping");

编辑:我将为 openrowset 部分使用动态 SQL,如下所示:

DECLARE @OpenRowSetSql nvarchar(MAX)

SET @OpenRowSetSql =
'INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK '''+ @filePath + ''', SINGLE_BLOB) AS x;'

EXEC sp_executesql @OpenRowSetSql

现在我的问题是: 如何在 C# 中加载参数?

【问题讨论】:

  • 在下面做谷歌搜索以查看互联网上的许多示例Stackoverflow FROM OPENROWSET
  • 好的,所以我发现我需要将我的 OpenRowSet 查询转换为动态 sql,但是如何在 C# 中加载参数?这是我的新查询here
  • 更新你的代码我不会点击未知链接抱歉编辑问题并在这里显示你的动态 SQL
  • 完成,对此感到抱歉

标签: c# sql xml dynamic-sql


【解决方案1】:

好的,所以我想出了我的答案。

如果您使用的是 SqlConnection,那么您需要将变量名称作为参数传入:

cmd.Parameters.Add(new SqlServerParameter("@filePath", "actual path from unzipping");

但是在 OleDbConnection 中,您需要执行类似

的操作
DECLARE @filePath nvarchar(256) 
SET @filePath = ?

在sql中...然后

 cmd.Parameters.Add(new OleDbParameter("0", "actual path from unzipping");

其中 0 对应数字变量(用“?”表示),它从顶部开始(从 0 开始)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多