2015-06-19 52 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失败,出现“表不存在”样式错误。更改了登录的默认数据库,现在正在处理。谢谢 :)。 –

相关问题