2011-04-26 43 views
0

你好,我希望這是我最後一篇關於sql connectionsstrings的文章....sql connectionstring逐步調試?

我有一個用VS2010Express編寫的win32console應用程序,我嘗試連接我的SQL服務器。 我想我做的一切正確,並且「唯一」的問題是連接字符串。任何人都可以確認代碼中沒有其他重大錯誤嗎?

關於連接字符串,我試過並嘗試過...... 一個網站建議您可以通過在桌面上創建一個connect.udl文件來獲取有效的字符串,然後雙擊它並按照對話框中的方式工作。當在texteditor中再次打開它時,找到正確的連接字符串。 在我而言,這將是:

提供商= SQLOLEDB.1;堅持安全信息= FALSE;用戶ID =測試;初始目錄= Stackhoover;數據源=彼得潘\ SQLEXPRESS

沒有工作要麼......有沒有辦法「調試」的字符串?要查看哪部分是錯誤的,例如「錯誤密碼」或「服務器未找到」? 防火牆現在關閉,所以這不是問題。 _hr返回「E_Fail」 調試器進入msado15.tli行1271

謝謝你的幫助! 快樂編碼!

#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> 
+0

您是否安裝了MDAC? SQL服務器服務是否正在運行?你多久得到錯誤?它是直接的嗎?你看過服務器上的日誌嗎?實例名稱是否正確(實例名稱=端口號,這就是爲什麼它很重要)另外,您需要獲取數字錯誤代碼。 [This Thread](http://www.codeguru.com/forum/showthread.php?p=211179)可能有幫助 – dawebber 2011-04-26 19:58:38

+0

@gbn我用sp_who2(SELECT * FROM sys.sysprocesses),它看起來像我連接! ;-)啤酒的時間問候Lumpi – Lumpi 2011-04-26 20:14:04

回答

3

你需要逃避反斜槓,所以:

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); 
+0

嗨unapersson!我以爲我已經嘗試過了,但它是在一段不同的測試代碼中。連接 - >打開(L「提供者= SQLOLEDB。1; Persist Security Info = False; User ID = Test; Initial Catalog = Stackhoover; Data Source = PETERPAN \\ SQLEXPRESS「,L」Test「,L」Test「,USEADO :: adConnectUnspecified);似乎有效,你知道嗎一個快速和骯髒的方式來測試,如果我真的連接?Regards Lumpi – Lumpi 2011-04-26 19:53:46

+0

@Lumpi不,我從來沒有使用ADO - 像所有真正的男人,我使用裸ODBC。 – 2011-04-26 20:00:59

1

如果你有User ID那麼你需要password。我也忽略Persist Security Info。你需要一個尾隨;。見ConnectionStrings.comMS page

我期望的連接字符串看起來更像這些具體取決於您使用的是SQL Server登錄或Windows身份驗證

提供商= SQLOLEDB.1之一;用戶ID =測試;密碼= foo的;數據庫= Stackhoover;服務器=彼得潘\ SQLEXPRESS;

Provider = SQLOLEDB.1; Integrated Security = true; Database = Stackhoover; Server = PETERPAN \ SQLEXPRESS;

+0

我同意,但系統不!沒有密碼的工作,無論出於何種原因。感謝您描述連接字符串參數的鏈接。非常有幫助! – Lumpi 2011-04-30 07:58:55