2012-02-25 73 views
0

我試圖連接到使用下面的代碼示例數據庫羅斯文在SQL Server 2005 Express的通過Visual C++ 2008連接到SQL Server數據庫:使用Visual C++

SqlConnection^ con=gcnew SqlConnection(); 
con->ConnectionString="Data Source=localhost\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI"; 

SqlCommand^ com=gcnew SqlCommand(); 
com->Connection=con; 
com->CommandText="Select * From Customers"; 

try 
{ 
    con->Open(); 

    SqlDataReader^ myReader; 
    myReader=com->ExecuteReader(); 
    myReader->Read(); 

    Console::WriteLine(myReader->GetData(5)); 

    myReader->Close(); 
} 
catch(Exception^ e) 
{ 
    Console::WriteLine(e->Message); 
} 
finally 
{ 
    con->Close(); 
} 

但我得到不同的是

登錄到數據庫失敗,用戶PC-ANKIT

並在此之後,我不知道發生了什麼,但各表數據庫神奇消失。 SQL Server Management Studio中的數據庫列表仍顯示Northwind數據庫,但不包含任何表,視圖或任何內容。另外,當我嘗試在Visual Web Developer 2008 Express版本中使用VB中的等效代碼做同樣的事情時 - 不出現任何問題!我能夠連接到數據庫並訪問所有表中的數據。

任何人都可以幫我解決這個問題嗎?提前致謝!

回答

2

嘗試使用visual studio的服務器瀏覽器連接到數據庫。 如果連接成功,您可以右鍵單擊連接並查看屬性。在那裏你會找到連接字符串 - 在你的應用程序中使用它,並檢查它是否工作。

請注意,這是一個受信任的連接,如果你想使用的用戶名和密碼,我用:

服務器= myServerAddress;數據庫= MyDatabase的;用戶ID =名爲myUsername;密碼= MYPASSWORD;集成安全性= SSPI ;

希望它有幫助!

+0

感謝您的回答!但我仍然不明白爲什麼我以前使用的連接字符串在VC++的情況下不起作用,因爲它在Visual Web Developer中使用時起作用 – ankit0311 2012-02-29 04:13:40

2

您的連接字符串ConnectionString="Data Source=localhost\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI";表示您嘗試使用「集成安全性」訪問它,該集成安全性使用當前登錄的Windows用戶對數據庫進行身份驗證。也許這樣的用戶憑證對於你的數據庫還不存在。 您可以提供使用此語法明確憑據:

Data Source=ServerName; Initial Catalog=DatabaseName; User Id=UserName; Password=UserPassword; 
1

你需要確保用戶PC-ANKIT至少在你選擇的數據庫db_datareader(不只是在SQL Server登錄)。您可以在SQL Management [your database] -> Security -> Users中執行此操作。您的用戶(或其所屬的組)必須列在此節點下。對於此用戶(或組)Properties -> General -> Database Role Membership請確保選擇了db_datareader(或db_owner)。

如果仍有問題,請嘗試使用用戶名和密碼驗證。請記住在SQL Server -> Properties -> Security -> SQL Server and Windows Authentication Mode中啓用混合安全模式。在這種情況下,您需要更改連接字符串,方法是將Integrated Security=SSPI;替換爲User ID=your_user;Password=pass;

確保在VB版本中使用完全相同的連接字符串以排除這兩種情況之間的差異。