正如我之前所说的——这不是GO
一个T-SQL 关键字——放弃它!
WITH FILE
其次,仅恢复文件头时不需要 a - 试试这个:
Dim strCommand as String = "RESTORE FILELISTONLY
FROM DISK = 'C:\AdventureWorks.BAK'"
这将返回几条数据——因此您需要处理一个结果集,从而用于.ExecuteReader()
从查询中获取这些数据。
试试这段代码(它是 C#,但应该很容易转换为 VB.NET):
using System;
using System.Data;
using System.Data.SqlClient;
namespace GetPhysicalDbNames
{
class Program
{
static void Main(string[] args)
{
string stmt = @"RESTORE FILELISTONLY FROM DISK = 'D:\temp\AW2012.BAK'";
using (SqlConnection conn = new SqlConnection("server=.;database=master;integrated Security=SSPI"))
using (SqlCommand cmd = new SqlCommand(stmt, conn))
{
DataTable tblInfo = new DataTable();
SqlDataAdapter dap = new SqlDataAdapter(cmd);
dap.Fill(tblInfo);
foreach (DataRow row in tblInfo.Rows)
{
Console.WriteLine("Logical name: {0}", row["LogicalName"]);
Console.WriteLine("Physical file name: {0}", row["PhysicalName"]);
}
}
}
}
}
执行该RESTORE
命令会返回一个结果集,其中包含其他两列LogicalName
和PhysicalName
(这是.mdf
和.ldf
文件的实际完整物理文件名)