2012-02-25 3 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

И после этого, я понятия не имею, что происходит, но таблицы я n база данных волшебным образом исчезает. Список баз данных в SQL Server Management Studio по-прежнему показывает базу данных Northwind, но она не содержит таблиц, представлений или чего-либо еще.

Кроме того, когда я пытаюсь сделать то же самое, используя эквивалентный код в VB в Visual Web Developer 2008 express edition - никаких проблем не возникает вообще! Я могу подключиться к базе данных и получить доступ к данным во всех таблицах.

Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо!

ответ

2

Попробуйте подключиться к базе данных с помощью проводника визуальных студий. Если вы успешно подключитесь, вы можете щелкнуть правой кнопкой мыши соединение и проверить свойства. Там вы найдете строку подключения - используйте ее в своем приложении и проверьте, работает ли она.

Обратите внимание, что это доверенное соединение, если вы хотите использовать имя пользователя и пароль, я использую:

Server = myServerAddress; Database = MyDatabase; ID пользователя = MyUserName; Password = MyPassword; Integrated Security = SSPI ;

Надеюсь, это поможет!

+0

благодарит за ответ! Но я до сих пор не понимаю, почему строка подключения, которую я использовал ранее, не работает в случае VC++, поскольку она работает, когда я использую ее в Visual Web Developer – ankit0311

2

Ваша строка подключения ConnectionString="Data Source=localhost\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI"; указывает, что вы пытаетесь получить к ней доступ с помощью «интегрированной безопасности», которая использует для входа в систему пользователя, который в настоящее время вошел в систему, для проверки подлинности базы данных. Возможно, такие учетные данные пользователя еще не существуют для вашей базы данных. Вы можете предоставить явные учетные данные, используя следующий синтаксис:

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

Вы должны убедиться, что пользователь PC-ANKIT в выбранной базе данных, по меньшей мере db_datareader (а не только Войти в сервере SQL). Это можно сделать в 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, чтобы исключить любые различия между этими двумя сценариями.

Смежные вопросы