欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

从0开始学golang--1.1--连接ms sql server数据库

程序员文章站 2022-07-05 17:20:32
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字段名称,不然会出错。网上都直接放*,可是获取不到数据,没有去验证是否和表里的字段多少有关系,或许别人表里只有两个字段