zoukankan      html  css  js  c++  java
  • 从0开始学golang--1.1--连接ms sql server数据库

    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 Number: %d ", FID, FAccount)
        }
        return
    }
     
    我查出来的是必须对应select字段名称,不然会出错。网上都直接放*,可是获取不到数据,没有去验证是否和表里的字段多少有关系,或许别人表里只有两个字段
  • 相关阅读:
    ed新手使用进阶全功略
    directx的媒体对象
    Makefile详解
    Bourne Shell及shell编程(1)
    Win32CompileMSYSNew
    GNU hello学习笔记(1)——autoconf和automake
    VC++中通过MultiByteToWideChar将string|char*转换为wstring|wchar_t*
    使用 Bash shell 脚本进行功能测试[转]
    添加VLC模块
    libvlc外部api的简单整理
  • 原文地址:https://www.cnblogs.com/Liang2790912648/p/10604310.html
Copyright © 2011-2022 走看看