отладка sql connectionstring шаг за шагом? - PullRequest
0 голосов
/ 26 апреля 2011

Здравствуйте, я надеюсь, что это мой последний пост, касающийся строк соединений sql ....

У меня есть приложение win32console, написанное на VS2010Express, и я пытаюсь подключить свой SQL-сервер. Я думаю, что все сделал правильно, и что единственной проблемой является строка подключения. Может ли кто-нибудь подтвердить, что в коде нет другой большой ошибки?

Что касается соединительной строки, я пробовал и пытался .... Один сайт предложил, чтобы вы могли получить правильную строку, создав файл connect.udl на рабочем столе, дважды щелкнув по нему и пройдясь по диалоговому окну. При повторном его открытии в текстовом редакторе найдена правильная строка соединения. В моем случае это будет:

Поставщик = SQLOLEDB.1; Постоянная информация о безопасности = Ложь; Идентификатор пользователя = Тест; Начальный каталог = Стекировщик; Источник данных = PETERPAN \ SQLEXPRESS

тоже не сработало .... Есть ли способ "отладить" строку? Чтобы увидеть, какая часть неправильна, например, «неправильный pwd» или «сервер не найден»? Брандмауэр сейчас выключен, так что это не проблема. _hr возвращает "E_Fail" Отладчик переходит в msado15.tli line1271

Спасибо вам за любую помощь! Удачного кодирования!

#include "stdafx.h"
void HandleError(HRESULT)
{
MessageBox( NULL, L"ERROR", L"XX!",MB_ICONEXCLAMATION |MB_RETRYCANCEL);
}

int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;                                     //http://en.wikipedia.org/wiki/HRESULT  

//creating a connection object
USEADO::_ConnectionPtr connection;
//create a recordset object
USEADO::_RecordsetPtr recordset;

 //      Initialize COM  
    if(FAILED(hr = CoInitialize(NULL)))
    {
        HandleError(hr); 
        return hr;
    }   

if(FAILED(hr = connection.CreateInstance(__uuidof(USEADO::Connection))))
    {
        HandleError(hr); 
        return hr;
    }

if(FAILED(hr = recordset.CreateInstance(__uuidof(USEADO::Recordset))))
    {
        HandleError(hr); 
        return hr;
    }

    connection->CursorLocation = USEADO::adUseServer; //http://dev.mysql.com/tech-resources/articles/vb-cursors-and-locks.html
                                       //adUseClient;


    //Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
    connection->Open(L"Data Source=PETERPAN\SQLEXPRESS;Initial Catalog=Stackhoover; User Id=Test; Password = Test", L"", L"", USEADO::adConnectUnspecified);
    //connection->Open(L"Provider=SQLOLEDB.1;Persist Security Info=False;User ID=Test;Initial Catalog=Stackhoover;Data Source=PETERPAN\SQLEXPRESS", L"Test", L"Test", USEADO::adConnectUnspecified);
    //DRIVER=SQL Native Client;SERVER=.\SQLExpress;Trusted_Connection=Yes;Initial Catalog=ADOTest;
    //connection->Open(L"DRIVER=SQL Native Client;SERVER=PETERPAN\SQLEXPRESS;Trusted_Connection=Yes;Initial Catalog=Stackhoover;", L"", L"", USEADO::adConnectUnspecified);

return 0;
}

Мой stdafx.h

 #pragma once
#import "C:\Program\Delade filer\System\ado\msado15.dll"    rename_namespace("USEADO"),rename("EOF","EndOfFile")
// Define ADO Namespace as global
using namespace USEADO;

#include "targetver.h"
#include <stdio.h>
#include <tchar.h>

Ответы [ 2 ]

3 голосов
/ 26 апреля 2011

Вам необходимо избежать обратной косой черты, поэтому:

connection->Open(L"Data Source=PETERPAN\SQLEXPRESS;Initial Catalog=Stackhoover; User Id=Test; Password = Test", L"", L"", USEADO::adConnectUnspecified);

должно быть:

connection->Open(L"Data Source=PETERPAN\\SQLEXPRESS;Initial Catalog=Stackhoover; User Id=Test; Password = Test", L"", L"", USEADO::adConnectUnspecified);
1 голос
/ 27 апреля 2011

Если у вас User ID, тогда вам нужно password. Я также проигнорировал бы Persist Security Info. И вам нужен трейлинг ;. См. ConnectionStrings.com и MS page

Я ожидаю, что строка подключения будет больше похожа на одну из них в зависимости от того, используете ли вы вход в систему SQL Server или проверку подлинности Windows

Провайдер = SQLOLEDB.1; Идентификатор пользователя = Тест; Пароль = foo; База данных = Стабилизация; Сервер = PETERPAN \ SQLEXPRESS;

Провайдер = SQLOLEDB.1; Интегрированная безопасность = true; База данных = Обработка пакетов; Сервер = PETERPAN \ SQLEXPRESS;

...