package main
import (
"database/sql"
"fmt"
"strings"
)
import (
_ "github.com/mattn/go-adodb"
)
type Mssql struct {
*sql.DB
dataSource string
database string
windows bool
sa SA
}
type SA struct {
user string
passwd string
}
func (m *Mssql) Open() (err error) {
var conf []string
conf = append(conf, "Provider=SQLOLEDB")
conf = append(conf, "Data Source="+m.dataSource)
if m.windows {
// Integrated Security=SSPI 這個表示以當前WINDOWS系統用戶身去登錄SQL SERVER服務器(需要在安裝sqlserver時候設置),
// 如果SQL SERVER服務器不支持這種方式登錄時,就會出錯。
conf = append(conf, "integrated security=SSPI")
}
conf = append(conf, "Initial Catalog="+m.database)
conf = append(conf, "user id="+m.sa.user)
conf = append(conf, "password="+m.sa.passwd)
m.DB, err = sql.Open("adodb", strings.Join(conf, ";"))
if err != nil {
return err
}
return nil
}
func main() {
db := Mssql{
dataSource: "數據庫地址",
database: "數據庫名稱",
// windwos: true 為windows身份驗證,false 必須設置sa賬號和密碼
windows: false,
sa: SA{
user: "賬號",
passwd: "密碼",
},
}
// 連接數據庫
err := db.Open()
if err != nil {
fmt.Println("sql open:", err)
return
}
defer db.Close()
// 執行SQL語句
rows, err := db.Query("SELECT FID,FAccount FROM dbo.TAccounts")
if err != nil {
fmt.Println("query: ", err)
return
}
for rows.Next() {
var FID int
var FAccount string
rows.Scan(&FID, &FAccount)
fmt.Printf("Name: %s \t Number: %d\n", FID, FAccount)
}
return
}
我查出來的是必須對應select字段名稱,不然會出錯。網上都直接放*,可是獲取不到數據,沒有去驗證是否和表里的字段多少有關系,或許別人表里只有兩個字段