Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Quickstart verbindest du dich mit einer SQL Server-Datenbank von Go aus und führst eine Abfrage aus. Du verwendest den go-mssqldb Treiber mit dem Standardpaket database/sql .
Prerequisites
Für das Hauptbeispiel in diesem Artikel benötigen Sie:
- Geh zu 1.25 oder später
- Zugriff auf einen SQL Server-kompatiblen Endpunkt. Das Hauptbeispiel geht von einer lokalen SQL Server-Instanz unter Windows aus.
- Die
AdventureWorks2025-Beispieldatenbank. Für Download- und Wiederherstellungsanleitungen siehe AdventureWorks-Beispieldatenbanken.
Wenn du dich mit Azure SQL statt einer lokalen SQL Server-Instanz verbindest, nutze Use go-mssqldb mit der Azure SQL-Datenbank für Azure-spezifische Voraussetzungen und Einrichtungen.
Auswählen des Startpunkts
Das Hauptbeispiel in diesem Artikel verwendet eine lokale SQL Server-Instanz unter Windows mit integrierter Authentifizierung. Verwenden Sie später in diesem Artikel die SQL-Authentifizierung oder Microsoft Entra ID-Varianten, wenn Sie Linux oder macOS nutzen oder sich mit Azure SQL verbinden.
- Lesen Sie diesen Artikel weiter, wenn Sie die kleinste End-to-End-Probe gegen SQL Server möchten, und Sie können eine lokale Testdatenbank erstellen.
- Wenn Sie sich mit einem SQL Server anstelle der Windows Authentication verbinden, lesen Sie diesen Artikel weiter und verwenden Sie später die SQL-Authentifizierungsvariante.
- Wenn du dich mit Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Fabric verbindest, beginne mit Use go-mssqldb with Azure SQL-Datenbank. Dieser Artikel behandelt Azure-TLS-Anforderungen, Verbindungsgrenzen und passwortlose Authentifizierung.
- Wenn du Microsoft Entra ID verwendest, importiere
github.com/microsoft/go-mssqldb/azureadund verwende denazuresqlTreibernamen. Für Details zum Zugangsdatenfluss siehe Microsoft Entra ID Authentifizierung.
Erstellen eines Go-Projekts
Erstellen und initialisieren Sie ein neues Verzeichnis:
mkdir go-sql-quickstart cd go-sql-quickstart go mod init go-sql-quickstartInstallieren Sie den Treiber:
go get github.com/microsoft/go-mssqldb
Verbinden und Abfragen
Erstelle eine Datei namens main.go mit dem folgenden Go-Code:
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())
}
}
Führen Sie die Anwendung aus:
go run main.go
Erwartete Ausgabe:
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)
...
Fügen Sie eine Reihe ein
Füge main.go die folgende Funktion hinzu und rufe sie in main() auf:
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()
}
Von Bedeutung
Der Treiber go-mssqldb unterstützt LastInsertId()nicht . Das Aufrufen liefert einen Fehler. Verwenden Sie eine OUTPUT Klausel oder eine separate SELECT SCOPE_IDENTITY() Abfrage, um einen eingefügten Identitätswert abzurufen.
Verwenden Sie SQL-Authentifizierung
Um eine Verbindung mit einer SQL Server-Authentifizierung statt einer Windows Authentication herzustellen, ändern Sie die Verbindungszeichenfolge. Für alle Verbindungszeichenfolge-Formate und -Optionen siehe Connection strings.
connString := "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025"
Verwenden Sie Microsoft Entra ID
Wenn du dich mit Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Fabric verbindest, beginne mit Use go-mssqldb with Azure SQL-Datenbank. Das Beispiel in diesem Abschnitt zeigt nur die minimalen Codeänderungen, die in main.go erforderlich sind.
Zur Authentifizierung mit Microsoft Entra ID importieren Sie das azuread Paket:
import (
_ "github.com/microsoft/go-mssqldb/azuread"
)
Dann verwenden Sie den Treibernamen azuresql und fügen Sie fedauth der Verbindungszeichenfolge hinzu. Für alle Microsoft Entra-Optionen siehe Microsoft Entra ID-Authentifizierung.
db, err := sql.Open("azuresql", "sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false")