2016-07-11 71 views
0

我試圖以編程方式創建一個新的數據庫(.mdf文件)並最終在數據庫中創建表。我不太確定使用什麼連接字符串,我在下面的代碼中看到了在多個網站上幾次拋出的代碼。在執行我得到一個錯誤:以編程方式創建數據庫(沒有權限?)

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll 
Additional information: CREATE DATABASE permission denied in database 'master'. 

下面是我運行後創建數據庫的代碼:

string filename = "C:\\AnalysisResultsDatabase.mdf"; 
string databaseName = Path.GetFileNameWithoutExtension(filename); 

using (var connection = new SqlConnection("Server=localhost;Integrated security=SSPI;database=master")) 
{ 
    connection.Open(); 
    using (var command = connection.CreateCommand()) 
    { 
     command.CommandText = String.Format("CREATE DATABASE {0} ON PRIMARY (NAME={0}, FILENAME='{1}')", databaseName, filename); 
     command.ExecuteNonQuery(); 

     command.CommandText = String.Format("EXEC sp_detach_db '{0}', 'true'", databaseName); 
     command.ExecuteNonQuery(); 
    } 
} 
+1

您的域帳戶是否具有創建數據庫所需的權限?它看起來像你得到一個權限被拒絕的錯誤。 –

+0

[此q/a](http://stackoverflow.com/q/10481890/211627)有幫助嗎? – JDB

+0

任何時候你使用字符串格式來構建SQL查詢,都要非常注意SQL注入。我不確定是否有用於CREATE DATABASE的選項,但對SELECT/UPDATE/INSERT/DELETE使用參數化查詢。 http://security.stackexchange.com/questions/128412/sql-injection-is-17-years-old-why-is-it-still-around –

回答

0

它可以由SQL Server實例的服務標識引起不必對磁盤上MDF文件位置的權限。

只是爲了檢查,嘗試將服務標識更改爲LocalSystem(如果它尚未設置爲該帳戶)。

0

您登錄的域帳戶沒有CREATE DATABASE的適當權限。在創建數據庫之前,您必須聯繫具有足夠權限的管理員授予您這些權限。

相關問題