2015-06-19 78 views
-1

我有一個問題,我似乎無法解決,可能是由於我沒有經驗與GO。我有以下代碼在一臺服務器上工作,但沒有在另一臺服務器上工作。下面是代碼:'無效的內存地址'錯誤與去-mssql

// Build out the connection string to the database, and then open the connection to the database. 
connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d", *server, *user, *password, *port) 
if *debug { fmt.Printf(" connString:%s\n", connString) } 
db, err = sql.Open("mssql", connString) 
if err != nil { log.Fatal("Open connection failed:", err.Error()) } 
err = db.Ping() 
if err != nil { 
    fmt.Println("Cannot connect: ", err.Error()) 
    return 
} 

rows, _ := db.Query("SELECT Zip FROM Zip_Rural WHERE Zip = ?", ZipCode[0:5]) 
defer rows.Close() 

if !rows.Next() { 
    acreageRequirement = .5 
} 

在讀取if !rows.Next()我得到以下錯誤行:

panic: runtime error: invalid memory address or nil pointer dereference 
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x20 pc=0x477918] 

此相同的代碼在另一臺服務器上就好了,在兩臺機器上運行的GO版本1.4.2 。我有一種感覺,我在這裏某處有一些不好的語法,但不知道真正的問題是什麼。在同一個文件內呼叫db.Exec工作得很好,這使我相信我的數據庫連接完全正常,但由於某種原因db.Query未正確執行。

回答

1

db.Query可能有錯誤。檢查你的錯誤,如果它不是nil,假設rowsnil。即調用rows.Next()將發生段錯誤。 如果顯示錯誤,您可能會發現問題所在。

+0

謝謝,這就是我作爲一個noob得到的。我的用戶的默認數據庫不正確,因此.Query失敗,出現「表不存在」樣式錯誤。更改了登錄的默認數據庫,現在正在處理。謝謝 :)。 –

相關問題