Pregunta

Estaba contemplando la creación de una herramienta para cargar campos Varbinary (MAX) en una base de datos SQL Server 2008 con archivos seleccionados de un cuadro de diálogo de archivo abierto. ¿Hay alguna herramienta o equivalente que pueda usar? Mi servidor SQL se encuentra en un entorno alojado donde no tengo acceso físico al servidor, por lo que cargarlo con TSQL no es una opción.

¿Fue útil?

Solución

¿Qué hay de 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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top