Snabbstart: Använda Golang för att fråga en databas i Azure SQL Database eller Azure SQL Managed Instance
Gäller för:Azure SQL Database
Azure SQL Managed Instance
I den här snabbstarten använder du programmeringsspråket Golang för att ansluta till en Azure SQL-databas eller en databas i Azure SQL Managed Instance med drivrutinen go-mssqldb . Exemplet frågar och ändrar data med explicita Transact-SQL-instruktioner (T-SQL). Golang är ett programmeringsspråk med öppen källkod som gör det enkelt att skapa enkel, pålitlig och effektiv programvara.
Förutsättningar
Följande krävs för att slutföra den här snabbstarten:
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
En Azure SQL-databas eller en databas i Azure SQL Managed Instance. Du kan använda någon av dessa snabbstarter för att skapa en databas:
SQL Database SQL-hanterad instans SQL Server på virtuell Azure-dator Skapa Portal Portal Portal CLI CLI PowerShell PowerShell PowerShell I IP-brandväggsregel på servernivå Anslutning från en virtuell dator Anslut ivitet lokalt Anslut till en SQL Server-instans Load data (Läsa in data) AdventureWorks2022
läses in per snabbstartÅterställa WideWorldImporters Återställa WideWorldImporters Återställa eller importera AdventureWorks2022
från en BACPAC-fil från GitHubÅterställa eller importera AdventureWorks2022
från en BACPAC-fil från GitHubViktigt!
Skripten i den här artikeln skrivs för att använda
AdventureWorks2022
databasen. Med en SQL-hanterad instans måste du antingen importeraAdventureWorks2022
databasen till en instansdatabas eller ändra skripten i den här artikeln för att använda wide world importers-databasen.Go och relaterad programvara för ditt operativsystem installerat.
Den senaste versionen av sqlcmd för ditt operativsystem installerat.
Azure PowerShell Az-modulen för ditt operativsystem installerat.
Hämta serveranslutningsinformation
Hämta den anslutningsinformation som du behöver för att ansluta till databasen. Du behöver det fullständiga servernamnet eller värdnamnet, databasnamnet och inloggningsinformationen för de kommande procedurerna.
Logga in på Azure-portalen.
Gå till sidan SQL-databaser eller SQL-hanterade instanser .
På sidan Översikt granskar du det fullständigt kvalificerade servernamnet bredvid Servernamn för en databas i Azure SQL Database eller det fullständigt kvalificerade servernamnet (eller IP-adressen) bredvid Värd för en Azure SQL Managed Instance eller SQL Server på en virtuell Azure-dator. Om du vill kopiera servernamnet eller värdnamnet hovrar du över det och markerar ikonen Kopiera.
Kommentar
Anslutningsinformation för SQL Server på en virtuell Azure-dator finns i Anslut till en SQL Server-instans.
Skapa en ny mapp för Golang-projektet och beroenden
Från terminalen skapar du en ny projektmapp med namnet
SqlServerSample
.mkdir SqlServerSample
Skapa exempeldata
Skapa en fil som heter
CreateTestData.sql
i mappen iSqlServerSample
en textredigerare. Klistra in den här T-SQL-koden i filen. Det skapar ett schema, en tabell och infogar några rader.CREATE SCHEMA TestSchema; GO CREATE TABLE TestSchema.Employees ( Id INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, Name NVARCHAR(50), Location NVARCHAR(50) ); GO INSERT INTO TestSchema.Employees (Name, Location) VALUES (N'Jared', N'Australia'), (N'Nikita', N'India'), (N'Astrid', N'Germany'); GO SELECT * FROM TestSchema.Employees; GO
I kommandotolken navigerar du till
SqlServerSample
och användersqlcmd
för att ansluta till databasen och kör ditt nyligen skapade Azure SQL-skript. Ersätt lämpliga värden för servern och databasen.az login sqlcmd -S <your_server>.database.windows.net -G -d <your_database> -i ./CreateTestData.sql
Infoga kod för att fråga databasen
Skapa en fil med namnet
sample.go
iSqlServerSample
mappen.Klistra in den här koden i filen. Lägg till värdena för servern och databasen. I det här exemplet används Golang-kontextmetoderna för att kontrollera att det finns en aktiv anslutning.
package main import ( "github.com/microsoft/go-mssqldb/azuread" "database/sql" "context" "log" "fmt" "errors" ) var db *sql.DB var server = "<your_server.database.windows.net>" var port = 1433 var database = "<your_database>" func main() { // Build connection string connString := fmt.Sprintf("server=%s;port=%d;database=%s;fedauth=ActiveDirectoryDefault;", server, port, database) var err error // Create connection pool db, err = sql.Open(azuread.DriverName, connString) if err != nil { log.Fatal("Error creating connection pool: ", err.Error()) } ctx := context.Background() err = db.PingContext(ctx) if err != nil { log.Fatal(err.Error()) } fmt.Printf("Connected!\n") // Create employee createID, err := CreateEmployee("Jake", "United States") if err != nil { log.Fatal("Error creating Employee: ", err.Error()) } fmt.Printf("Inserted ID: %d successfully.\n", createID) // Read employees count, err := ReadEmployees() if err != nil { log.Fatal("Error reading Employees: ", err.Error()) } fmt.Printf("Read %d row(s) successfully.\n", count) // Update from database updatedRows, err := UpdateEmployee("Jake", "Poland") if err != nil { log.Fatal("Error updating Employee: ", err.Error()) } fmt.Printf("Updated %d row(s) successfully.\n", updatedRows) // Delete from database deletedRows, err := DeleteEmployee("Jake") if err != nil { log.Fatal("Error deleting Employee: ", err.Error()) } fmt.Printf("Deleted %d row(s) successfully.\n", deletedRows) } // CreateEmployee inserts an employee record func CreateEmployee(name string, location string) (int64, error) { ctx := context.Background() var err error if db == nil { err = errors.New("CreateEmployee: db is null") return -1, err } // Check if database is alive. err = db.PingContext(ctx) if err != nil { return -1, err } tsql := ` INSERT INTO TestSchema.Employees (Name, Location) VALUES (@Name, @Location); select isNull(SCOPE_IDENTITY(), -1); ` stmt, err := db.Prepare(tsql) if err != nil { return -1, err } defer stmt.Close() row := stmt.QueryRowContext( ctx, sql.Named("Name", name), sql.Named("Location", location)) var newID int64 err = row.Scan(&newID) if err != nil { return -1, err } return newID, nil } // ReadEmployees reads all employee records func ReadEmployees() (int, error) { ctx := context.Background() // Check if database is alive. err := db.PingContext(ctx) if err != nil { return -1, err } tsql := fmt.Sprintf("SELECT Id, Name, Location FROM TestSchema.Employees;") // Execute query rows, err := db.QueryContext(ctx, tsql) if err != nil { return -1, err } defer rows.Close() var count int // Iterate through the result set. for rows.Next() { var name, location string var id int // Get values from row. err := rows.Scan(&id, &name, &location) if err != nil { return -1, err } fmt.Printf("ID: %d, Name: %s, Location: %s\n", id, name, location) count++ } return count, nil } // UpdateEmployee updates an employee's information func UpdateEmployee(name string, location string) (int64, error) { ctx := context.Background() // Check if database is alive. err := db.PingContext(ctx) if err != nil { return -1, err } tsql := fmt.Sprintf("UPDATE TestSchema.Employees SET Location = @Location WHERE Name = @Name") // Execute non-query with named parameters result, err := db.ExecContext( ctx, tsql, sql.Named("Location", location), sql.Named("Name", name)) if err != nil { return -1, err } return result.RowsAffected() } // DeleteEmployee deletes an employee from the database func DeleteEmployee(name string) (int64, error) { ctx := context.Background() // Check if database is alive. err := db.PingContext(ctx) if err != nil { return -1, err } tsql := fmt.Sprintf("DELETE FROM TestSchema.Employees WHERE Name = @Name;") // Execute non-query with named parameters result, err := db.ExecContext(ctx, tsql, sql.Named("Name", name)) if err != nil { return -1, err } return result.RowsAffected() }
Hämta Golang-projektberoenden och kör koden
I kommandotolken går du till
SqlServerSample
och installerar SQL Server-drivrutinen för Go genom att köra följande kommandon.go mod init SqlServerSample go mod tidy
Kör följande kommando i kommandotolken.
az login go run sample.go
Verifiera utdata.
Connected! Inserted ID: 4 successfully. ID: 1, Name: Jared, Location: Australia ID: 2, Name: Nikita, Location: India ID: 3, Name: Astrid, Location: Germany ID: 4, Name: Jake, Location: United States Read 4 row(s) successfully. Updated 1 row(s) successfully. Deleted 1 row(s) successfully.