Hızlı Başlangıç: go-mssqldb ile bağlantı ve sorgulama

Bu hızlı başlangıçta, Go'dan bir SQL Server veritabanına bağlanıp bir sorgu çalıştırıyorsunuz. go-mssqldb sürücüsünü standart database/sql paketiyle kullanıyorsunuz.

Prerequisites

Bu makaledeki ana örnek için şunlara ihtiyacınız var:

Yerel SQL Server örneği yerine Azure SQL'e bağlanıyorsanız, Azure'a özgü ön koşullar ve kurulum için Go-mssqldb ile Azure SQL Veritabanı kullanın.

Başlangıç noktanızı seçin

Bu makaledeki ana örnek, entegre kimlik doğrulama ile Windows üzerinde yerel bir SQL Server örneği kullanır. Linux veya macOS kullanıyorsanız ya da Azure SQL'e bağlanıyorsanız, bu makalenin ilerleyen bölümlerinde SQL kimlik doğrulama veya Microsoft Entra ID varyasyonlarını kullanın.

  • SQL Server ile en küçük uçtan uca örnek istiyorsanız bu makalede devam edin ve yerel bir test veritabanı oluşturabilirsiniz.
  • Eğer Windows authentication yerine SQL Server girişiyle bağlanıyorsanız, bu makalede devam edin ve SQL kimlik doğrulama varyasyonunu daha sonra kullanın.
  • Azure SQL Veritabanı, Azure SQL Yönetilen Örneği veya Fabric'teki SQL veritabanına bağlanıyorsanız, başlamak için Azure SQL Veritabanı ile go-mssqldb kullanma bölümüne bakın. Bu makale Azure TLS gereksinimlerini, bağlantı sınırlarını ve şifresiz kimlik doğrulamayı ele alıyor.
  • Microsoft Entra ID kullanıyorsanız, github.com/microsoft/go-mssqldb/azuread öğesini içe aktarın ve azuresql sürücü adını kullanın. Kimlik bilgisi akışıyla ilgili ayrıntılar için Microsoft Entra ID kimlik doğrulamasına bakın.

Go projesi oluşturma

  1. Yeni bir dizin oluşturun ve başlatın:

    mkdir go-sql-quickstart
    cd go-sql-quickstart
    go mod init go-sql-quickstart
    
  2. Sürücüyü yükleyin:

    go get github.com/microsoft/go-mssqldb
    

Bağlanma ve sorgulama

Aşağıdaki Go koduyla adlandırılan bir dosya main.go oluşturun:

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())
    }
}

Uygulamayı çalıştırın:

go run main.go

Beklenen çıkış:

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)
  ...

Bir satır ekle

Aşağıdaki fonksiyonu main.go içine ekleyin ve main() içinden çağırın:

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

go-mssqldb sürücüsü, LastInsertId() öğesini desteklemiyor. Onu çağırmak hata veriyor. Eklenen bir kimlik değerini elde etmek için bir OUTPUT yan tümce veya ayrı bir SELECT SCOPE_IDENTITY() sorgu kullanın.

SQL kimlik doğrulamayı kullanma

Windows authentication yerine SQL Server doğrulaması kullanarak bağlantı kurmak için bağlantı dizesi'i değiştirin. Tüm bağlantı dizesi formatları ve seçenekleri için Connection strings sayfasına bakınız.

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

Microsoft Entra Id kullanma

Azure SQL Veritabanı, Azure SQL Yönetilen Örneği veya Fabric'teki SQL veritabanına bağlanıyorsanız, başlamak için Azure SQL Veritabanı ile go-mssqldb kullanma bölümüne bakın. Bu bölümdeki örnek, yalnızca içinde main.gogereken minimum kod değişikliklerini gösterir.

Microsoft Entra ID kullanarak kimlik doğrulaması yapmak için azuread paketini içe aktarın:

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

Sonra azuresql sürücü adını kullan ve bağlantı dizesi'e ekleyinfedauth. Tüm Microsoft Entra seçenekleri için bkz. Microsoft Entra ID doğrulaması.

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