我正在處理一個 Winforms 專案,我只是在設定用于安裝程式的安裝檔案。
設想
我為我設定的連接字串是這樣的:
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=F:\Application\MyAppv1.0\MyApp\DB.mdf;Integrated Security=True");
return con;
在這里,我從我的個人位置使用本地資料庫。
問題
在客戶端 PC 上安裝時,還會附加資料庫,因此安裝的檔案將位于C:\Program Files\Author\MyAppv1.0. 當我使用相同的連接字串時,應用程式顯示例外。那么,我應該在設定創建期間更新該位置的連接字串嗎?(我正在使用 MSI)。
對于這種情況,是否有任何普遍遵循的方法?
我的目標是讓已安裝的應用程式使用同樣位于命名安裝位置并隨安裝程式提供的資料庫DB.mdf。
提前謝謝大家。
uj5u.com熱心網友回復:
不要使用AttachDbFilename,它有很多問題。相反,通常使用CREATE DATABASE...FOR ATTACH.
在您的應用程式啟動時,您可以使用master當前資料庫連接到服務器,并檢查您的資料庫是否存在。如果它不存在,您可以創建它。
private static void CheckDbExistence(string connectionString)
{
const string query = @"
IF NOT EXISTS (SELECT 1
FROM sys.databases
WHERE name = 'MyDb')
BEGIN
DECLARE @sql nvarchar(max) = N'
CREATE DATABASE MyDb ON
(FILENAME = ' QUOTENAME(@mdf, '''') '),
(FILENAME = ' QUOTENAME(@ldf, '''') ')
FOR ATTACH;
';
EXEC (@sql);
END;
";
var csb = new SqlConnectionStringBuilder(connectionString);
csb.Initial Catalog = "master";
using (var conn = new SqlConnection(csb.ConnectionString))
using (var comm = new SqlCommand(query, conn))
{
comm.Parameters.Add("@mdf", SqlDbType.NVarChar, 255).Value = Path.Combine(Environment.CurrentDirectory, "MyDb.mdf");
comm.Parameters.Add("@ldf", SqlDbType.NVarChar, 255).Value = Path.Combine(Environment.CurrentDirectory, "MyDb.ldf");
conn.Open();
comm.ExecuteNonQuery();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/382075.html
