我正在尝试以编程方式在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();
行。
有什么想法吗?
答案 0 :(得分:0)
我认为这个问题适合你。 Use SMO to Change SQL Server Database Default Locations
TTRider的回答是: 您需要显式添加有关数据和日志文件的信息:
答案 1 :(得分:0)
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();
}
}