2016-02-29 85 views
1

我有一個登錄表單在我的項目,我寫下面的代碼附加我的數據庫(存在d:\)時,此登錄窗體加載:附加數據庫編程

try 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=master;Integrated Security=True"); 
    con.Open(); 

    SqlDataAdapter da = new SqlDataAdapter("select name from sys.databases", con); 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 

    string[] array = dt 
     .AsEnumerable() 
     .Select(row => row.Field<string>("Name")) 
     .ToArray(); 

    if (!array.Contains("cstmrDB", StringComparer.OrdinalIgnoreCase)) 
    { 
     SqlCommand cmd = new SqlCommand("sp_attach_db"); 
     cmd.Connection = con; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@dbname", "Apdb"); 
     cmd.Parameters.AddWithValue("@filename1", @"d:\Apdb.mdf"); 
     cmd.ExecuteNonQuery(); 

    } 
} 
catch (exception ex) 
{ 
    messagebox.show(ex.message); 
} 

它工作正常,在我的筆記本電腦。我發佈我的項目(使用c#發佈)並安裝SQL Server和我的項目,並將我的數據庫複製到另一臺PC的d:\中。但是當我運行我的項目時,數據庫不會附加!我不知道爲什麼會出現這個問題......但我想也許是因爲我沒有編寫任何代碼來定義* .ldf文件(但我把ddf和mdf都放在d:\中)

ERROR: A network-related or instance-specific error occurred while establishing a connection to SQL Server.

The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.

(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

+0

你有沒有收到任何錯誤? –

+0

嗯,是的,基本的調試技巧真的很難得到。首先捕獲異常並查看SQL Server日誌以查看發生了什麼。我很確定這個電話不會奇蹟般地無所事事。 – TomTom

+0

@DynamicVariable問題已更新 – Ali

回答

1

我想冒險猜測這是一個權限問題,通常新安裝的SQL Server運行的是NETWORK_SERVICE,這是一個相當低權限的帳戶。它可能無法訪問G驅動器的根目錄(或其中的任何部分)。

您可以通過將服務更改爲LocalSystem來非常快速地進行測試。一旦確認這是一個問題,我建議將使用日誌更改回NETWORK_SERVICE,然後將適當的權限應用到需要它的文件夾/文件。

+0

我該如何「將使用中的日誌更改回NETWORK_SERVICE,然後將適當的權限應用於需要它的文件夾/文件」 – Ali

+0

請參閱此鏈接,瞭解如何配置服務以「NETWORK SERVICE」身份運行:https:// technet.microsoft.com/en-us/library/cc755249.aspx。一旦你將它作爲'NETWORK SERVICE'再次運行,那麼你可以根據需要簡單地將該用戶添加到文件/文件夾權限中(我通常將它作爲NETWORK_SERVICE添加到ACL中)。 – CodingGorilla

+0

我該如何編程? – Ali