0

你好看看下面的代码:

Try

con.ConnectionString = strCon

Dim strCommand as String = "RESTORE FILELISTONLY 
                        FROM DISK = 'C:\AdventureWorks.BAK'
                        WITH FILE = 1
                        GO"

Dim cm As New SqlClient.SqlCommand(strCommand, con)

con.Open()

cm.ExecuteNonQuery()

有谁知道如何获取我的数据库的逻辑文件列表,它不适用于 executereader。我想为我的数据库备份文件获取 mdf 和 ldf 文件名。

谢谢。

4

1 回答 1

0

正如我之前所说的——这不是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命令会返回一个结果集,其中包含其他两列LogicalNamePhysicalName(这是.mdf.ldf文件的实际完整物理文件名)

于 2013-07-19T15:44:56.270 回答