【问题标题】:Is there a tool to load files into varbinary(max) fields?是否有将文件加载到 varbinary(max) 字段的工具?
【发布时间】:2011-03-19 18:53:08
【问题描述】:

我正在考虑创建一个工具来加载 SQL Server 2008 数据库中的 varbinary(max) 字段以及从打开文件对话框中选择的文件。我可以使用任何此类工具或等效工具吗?我的 SQL 服务器位于托管环境中,我无法物理访问服务器,因此无法使用 TSQL 加载它。

【问题讨论】:

  • 服务器本身的文件吗?如果是这样,我通常使用 TSQL 来执行此操作。 SELECT BulkColumn FROM OPENROWSET(BULK N'c:\somefile.txt', SINGLE_BLOB) as i
  • 不,我的服务器在托管环境中(使用此信息更新帖子)。
  • 对了。我不知道有任何工具可以做到这一点。我知道bcp 可以导出二进制数据——我从来没有调查过它是否可以用来导入它。
  • 如果不能使用 TSQL,该工具将如何与 SQL Server 通信?
  • TSQL 无法使用,因为它只知道本地 SQL 服务器,我无法将客户端 PC 上存在的文件加载到服务器。

标签: sql-server-2008 varbinarymax


【解决方案1】:

powershell怎么样?

# from: http://sev17.com/2010/05/t-sql-tuesday-006-blobs-filestream-and-powershell/
#
$server = "superfly\sqlexpress"
$database = "Yak"
$query = "INSERT dbo.FileStore VALUES (@FileData, @FileName)"
$filepath = "d:\yak.txt"
$FileName = get-childitem $filepath | select -ExpandProperty Name

$connection=new-object System.Data.SqlClient.SQLConnection
$connection.ConnectionString="Server={0};Database={1};Integrated Security=True" -f $server,$database
$command=new-object system.Data.SqlClient.SqlCommand($query,$connection)
$command.CommandTimeout=120
$connection.Open()

$fs = new-object System.IO.FileStream($filePath,[System.IO.FileMode]'Open',[System.IO.FileAccess]'Read')
$buffer = new-object byte[] -ArgumentList $fs.Length
$fs.Read($buffer, 0, $buffer.Length)
$fs.Close()

$command.Parameters.Add("@FileData", [System.Data.SqlDbType]"VarBinary", $buffer.Length)
$command.Parameters["@FileData"].Value = $buffer
$command.Parameters.Add("@FileName", [System.Data.SqlDbType]"NChar", 50)
$command.Parameters["@FileName"].Value = $FileName
$command.ExecuteNonQuery()

$connection.Close()

【讨论】:

  • 这很好,但我真的更喜欢 Windows 窗体/WPF 解决方案。如果我没有看到任何其他答案,我会接受这个。
  • 谢谢我一直在寻找这个sn-p!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多