我電腦 Go 的版本是 1.13.4,參考 gorm 文件 Connecting to database 連接到資料庫的時候一直出現 invalid port when using sqlserver://username:password@localhost:1433?database=dbname 的錯誤,這個錯誤看起來就是連線字串格式錯誤。 今天就來筆記,我如何處理這問題。

接著,我又去參考了微軟 SQL Server 的文件 Create GO apps using SQL Server on Windows ,發現他連線字串跟 gorm 的文件不太一樣啊!!

這是 gorm 文件的連線字串格式
sqlserver://username:password@localhost:1433?database=dbname

這是 SQL Server 官方文件的連線字串
server=localhost;user id=user;password=pwd;port=1433;database=dbname;

範例

於是乎,我將連線字串改成 Create GO apps using SQL Server on Windows 的連線字串格式,其他都參照 gorm 的文件,就成功了!! 下方式為成功連線的程式碼範例。

gorm connect to sql server
  • go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main

import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mssql"
)

var server = "localhost"
var port = 1433
var user = "xxxx"
var password = "aaayyybbbEE"
var database = "dbname"

func main() {

connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;",
server, user, password, port, database)

db, err := gorm.Open("mssql", connString)
if err != nil {
fmt.Println(err)
}

// 防止 gorm 產生 SQL 時,自動在 table 加上 s
// https://gorm.io/docs/conventions.html#Pluralized-Table-Name
db.SingularTable(true)

var id int
var name string

db.Debug().Table("Account").Select("Id, Name").Row().Scan(&id, &name)

fmt.Println(id, name)
}

延伸閱讀

[GORM - Conventions]
[GORM - Connecting to database]
[Create Go apps using SQL Server on Windows]