【发布时间】:2014-02-24 05:10:35
【问题描述】:
我需要做什么: 我正在为我的公司开发备份和恢复工具。备份远程 SQL 数据库没有任何问题。但是我在恢复它们时遇到了问题。我目前正在远程 SQL 上创建一个临时表,其中保存了数据库的二进制文件。
现在我需要将此二进制字段从远程 SQL Server 导出到需要保存在远程磁盘上的文件。该工具需要在本地机器上启动,因此无法在远程服务器上运行。
当前代码部分:
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
System.Data.SqlClient.SqlCommand commandAdd = new SqlCommand("CREATE TABLE dbo.tempTable (filename char(50), blob image);", conn);
conn.Open();
if (commandAdd.ExecuteNonQuery() != 0)
{
byte[] fileBytes = System.IO.File.ReadAllBytes(fileSource);
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand("INSERT INTO dbo.tempTable (blob,filename) values (@blob,@name)", conn);
command.Parameters.AddWithValue("blob", fileBytes);
command.Parameters.AddWithValue("name", dbName);
if (command.ExecuteNonQuery() != 0)
{
// This is just for testing if i get binary back
// string SQL = "SELECT blob FROM dbo.tempTable";
// SqlCommand cmd = new SqlCommand(SQL, conn);
// byte[] byt = (byte[])cmd.ExecuteScalar();
// I think Problem is within this 2 lines..
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteReader("'bcp.exe \"SELECT blob FROM dbo.tempTable\" queryout " + destinationSource + " -T -c'");
Restore restore = new Restore();
restore.Database = "_" + dbName;
restore.Action = RestoreActionType.Database;
restore.ReplaceDatabase = true;
restore.Devices.AddDevice(destinationSource, DeviceType.File);
restore.ReplaceDatabase = true;
restore.NoRecovery = false;
Server sqlServer = new Server(new ServerConnection(conn));
restore.SqlRestore(sqlServer);
}
}
SqlCommand commandDelete = new SqlCommand("DROP TABLE dbo.tempTable", conn);
commandDelete.ExecuteNonQuery();
conn.Close();
}
谢谢
【问题讨论】:
标签: c# sql-server export blob bcp