Gyorsindítás: Csatlakozz és kérdezz a go-mssqldb-vel

Ebben a gyorsindításban csatlakozol egy SQL Server adatbázishoz a Go-ból, és lefuttatsz egy lekérdezést. A go-mssqldb drivert a standard database/sql csomaggal használod.

Prerequisites

A cikk fő mintájához a következőkre van szükséged:

Ha Azure SQL-hez csatlakozol a helyi SQL Server helyett, használd a go-mssqldb funkciót Azure SQL Database-val az Azure-specifikus előfeltételekhez és beállításokhoz.

Válassza ki a kiindulási pontot

A cikk fő mintája egy helyi SQL Server példányt használ Windows-on integrált hitelesítéssel. Használd az SQL hitelesítést vagy a Microsoft Entra ID változatait ebben a cikkben későbbi részben, ha Linuxon vagy macOS-en vagy, vagy ha Azure SQL-hez csatlakozol.

  • Folytasd ezt a cikket, ha a legkisebb végpont-végpont mintát szeretnéd az SQL Server ellen, és létrehozhatsz egy helyi tesztadatbázist.
  • Ha SQL Server bejelentkezéssel csatlakozol Windows authentication helyett, folytasd ezt a cikket, és később használd az SQL hitelesítési változatot.
  • Ha Azure SQL Database-hoz, Azure SQL Managed Instance-hoz vagy SQL database-hez csatlakozol Fabric-ben, kezdd a Go-mssqldb with Azure SQL Database használatával. Ez a cikk az Azure TLS követelményeit, a kapcsolati korlátokat és a jelszó nélküli hitelesítést tárgyalja.
  • Ha Microsoft Entra ID-t használsz, importálj github.com/microsoft/go-mssqldb/azuread és használd az azuresql illesztőprogram nevét. A hitelesítőadat-folyamat részleteiért lásd: Microsoft Entra ID hitelesítés.

Go-projekt létrehozása

  1. Hozz létre és inicializálj egy új könyvtárat:

    mkdir go-sql-quickstart
    cd go-sql-quickstart
    go mod init go-sql-quickstart
    
  2. Telepítsd a drivert:

    go get github.com/microsoft/go-mssqldb
    

Csatlakozás és lekérdezés

Hozz létre egy fájlt a következő Go kóddal:main.go

package main

import (
    "context"
    "database/sql"
    "fmt"
    "log"

    _ "github.com/microsoft/go-mssqldb"
)

func main() {
    // Build the connection string.
    connString := "sqlserver://<server>?database=AdventureWorks2025&trusted_connection=yes"

    // Open and verify the connection.
    db, err := sql.Open("sqlserver", connString)
    if err != nil {
        log.Fatal("Error opening connection: ", err.Error())
    }
    defer db.Close()

    if err = db.PingContext(context.Background()); err != nil {
        log.Fatal("Error pinging database: ", err.Error())
    }
    fmt.Println("Connected to SQL Server.")

    // Run a SELECT query.
    rows, err := db.QueryContext(context.Background(),
        "SELECT DepartmentID, Name, GroupName FROM HumanResources.Department")
    if err != nil {
        log.Fatal("Error running query: ", err.Error())
    }
    defer rows.Close()

    // Iterate through the results.
    fmt.Println("\nDepartments:")
    for rows.Next() {
        var id int
        var name, groupName string
        if err := rows.Scan(&id, &name, &groupName); err != nil {
            log.Fatal("Error scanning row: ", err.Error())
        }
        fmt.Printf("  %d: %s (%s)\n", id, name, groupName)
    }
    if err = rows.Err(); err != nil {
        log.Fatal("Error after row iteration: ", err.Error())
    }
}

Futtassa az alkalmazást:

go run main.go

Várt kimenet:

Connected to SQL Server.

Departments:
  1: Engineering (Research and Development)
  2: Tool Design (Research and Development)
  3: Sales (Sales and Marketing)
  4: Marketing (Sales and Marketing)
  ...

Sor behelyezése

Add hozzá a következő függvényt a main.go-hoz, és hívd meg a main()-ból:

func insertDepartment(db *sql.DB, name, groupName string) (int64, error) {
    ctx := context.Background()
    result, err := db.ExecContext(ctx,
        "INSERT INTO HumanResources.Department (Name, GroupName) VALUES (@p1, @p2)",
        sql.Named("p1", name),
        sql.Named("p2", groupName))
    if err != nil {
        return 0, err
    }
    return result.RowsAffected()
}

Important

A go-mssqldb illesztőprogram nem támogatja a LastInsertId() elemet. A meghívása hibát jelez. Használj egy OUTPUT záradékot vagy külön SELECT SCOPE_IDENTITY() lekérdezést egy beillesztett identitásérték lekérésére.

SQL-hitelesítés használata

Ha SQL Server hitelesítéssel csatlakozz Windows authentication helyett, módosítsd a kapcsolati karakterlánc-et. Minden kapcsolati karakterlánc formátumért és opcióért lásd: Connection strings.

connString := "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025"

A Microsoft Entra-azonosító használata

Ha Azure SQL Database-hoz, Azure SQL Managed Instance-hoz vagy SQL database-hez csatlakozol Fabric-ben, kezdd a Go-mssqldb with Azure SQL Database használatával. A példa ebben a szakaszban csak a minimális kódváltoztatásokat mutatja be.main.go

Hitelesítéshez a Microsoft Entra ID használatával importáljuk a azuread csomagot:

import (
    _ "github.com/microsoft/go-mssqldb/azuread"
)

Ezután használd a azuresql driver nevet, és add fedauth hozzá a kapcsolati karakterlánc-hez. Minden Microsoft Entra opcióért lásd: Microsoft Entra ID hitelesítés.

db, err := sql.Open("azuresql", "sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false")