package main import ( "database/sql" "fmt" "strings" ) import ( _ "github.com/mattn/go-adodb" ) type Mssql struct { *sql.DB dataSource string database ...
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欄位名稱,不然會出錯。網上都直接放*,可是獲取不到數據,沒有去驗證是否和表裡的欄位多少有關係,或許別人表裡只有兩個欄位