2017-03-02 16 views
0

我正在讀取用戶的SQL Server數據庫的連接字符串,由randomstring在這裏表示。當我將randomstring打印到控制檯時,它看起來非常完美,我已經完成了十幾次檢查。然而,連接失敗,pypyodbc連接顯式字符串,但不可變

pypyodbc.Error:(「IM002」,「[IM002] [微軟]

如果我明確地傳遞完全相同的字符串指針,該連接工作正常,我需要做與特定字符串變量什麼能夠使用它

randomstring = ShowConnString(self.cframe).connstringtext 
    print(randomstring) 
    self.conn = pypyodbc.connect(randomstring) 
    #self.conn = pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password') 

編輯:打印(randomstring)輸出:

pypyodbc.connect(驅動程序= '{SQL服務器}',服務器=」 (本地)',數據庫='審計',uid ='sa',pwd ='密碼')

+1

請編輯您的問題,以確切顯示當您打印(randomstring)時出現在控制檯中的內容。 –

回答

2

首先要注意的是,您的第二個(註釋掉的)示例未使用「顯式[連接]字符串」連接,它使用一系列關鍵字參數(「kwargs」)指定driverserver等。注意連接字符串形式的關鍵字參數形式之間的細微差別......

self.conn = pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password') 

...和:

self.conn = pypyodbc.connect('driver={SQL Server};server=(local);database=Audit;uid=sa;pwd=password') 

現在,如果你randomstring變量r eally確包含

pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password') 

那麼它絕對不是一個有效的ODBC連接字符串。即使它只是包含

driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password' 

,將仍然不會是一個有效的連接字符串,因爲該項目是由逗號(沒有分號)分開,還有周圍的值引號。在將它傳遞給.connect方法之前,您需要將randomstring值的內容轉換爲適當的ODBC連接字符串。

+0

randomstring現在正在輸出 驅動程序= {SQL Server}; server =(local); database = Audit; uid = sa; pwd = password 但我仍然得到與self.conn相同的錯誤 - pypyodbc.connect (randomstring),但通過以下顯式調用它可以工作: self.conn = pypyodbc.connect('driver = {SQL Server}; server =(local); database = GermanAudit; uid = sa; pwd = _PWD4sa_') 我不明白 – pickarooney

+0

實際上,我認爲文本框的值是在它前面帶有換行符的情況下返回的,當我將它打印到控制檯時,它從控制檯屏幕頂部向下一行 – pickarooney