【问题标题】:Programmatically modifying the file path location for a C# SMO created database?以编程方式修改 C# SMO 创建的数据库的文件路径位置?
【发布时间】:2015-03-06 19:20:55
【问题描述】:

我正在尝试使用 C# 中的 SMO 以编程方式创建一个新数据库。对于这个项目,我不希望将 .mdf/.ldf 文件放在默认文件夹中 “C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA”。我在网上没有找到任何告诉如何修改文件位置设置的内容。

当我运行以下代码时,我得到一个失败的操作异常:

Server srv = new Server(serverName.Text);

var db = new Database(srv, dbName.Text);            

db.Create();

DataFile df = new DataFile(db.FileGroups["PRIMARY"],
    dbName.Text, pathText.Text + dbName.Text + "_data.mdf");

df.Create();

LogFile lf = new LogFile(db, "Log01", pathText.Text + dbName.Text + "_log.ldf");
lf.Create();

异常发生在df.Create(); 行。 有什么想法吗?

【问题讨论】:

    标签: c# sql-server smo


    【解决方案1】:

    我想这个回答了你的问题。 Use SMO to Change SQL Server Database Default Locations

    TTRider 的回答是: 您需要明确添加有关数据和日志文件的信息:

    【讨论】:

    • 谢谢。基于您的建议的新代码: Server srv = new Server(serverName.Text); srv.DefaultFile = pathText.Text; srv.Alter(); srv.Refresh();数据库 smoDatabase = new Database(srv, dbName.Text); smoDatabase.Create(); srv.Refresh(); srv.DefaultFile 没有任何区别。这次它没有崩溃,但仍然在默认位置结束。
    【解决方案2】:

    TTRider 在链接问题中的回答指出了正确的方向,但不完整。使用来自 this post 的一些附加信息,我能够让它工作(使用 SMO 2016 库测试)。

    private void CreateDatabase(string connectionString, string databaseName, string dataFilePath)
    {
        using (SqlConnection sqlConnection = new SqlConnection(connectionString))
        {
            ServerConnection serverConnection = new ServerConnection(sqlConnection);
            Server sqlServer = new Server(serverConnection);
            Database smoDatabase = new Database(sqlServer, databaseName);
    
            string dataFileName = string.Format("{0}_Data", databaseName);
            string dataFileFullPath = Path.ChangeExtension(Path.Combine(dataFilePath, dataFileName), ".mdf");
            string logFileName = string.Format("{0}_Log", databaseName);
            string logFileFullPath = Path.ChangeExtension(Path.Combine(dataFilePath, logFileName), ".ldf");
    
            FileGroup fileGroup = new FileGroup(smoDatabase, "PRIMARY");
            smoDatabase.FileGroups.Add(fileGroup);
    
            DataFile dataFile = new DataFile(fileGroup, dataFileName, dataFileFullPath);
            dataFile.IsPrimaryFile = true;
            fileGroup.Files.Add(dataFile);
    
            LogFile logFile = new LogFile(smoDatabase, logFileName, logFileFullPath);
            smoDatabase.LogFiles.Add(logFile);
    
            smoDatabase.Create();
    
            serverConnection.Disconnect();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      相关资源
      最近更新 更多