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 databas i Azure SQL Database eller Azure SQL Managed Instance. Därefter kommer du att köra Transact-SQL-uttryck för att fråga och redigera data. 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ör att slutföra den här snabbstarten behöver du:
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
En databas i Azure SQL Database eller 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å virtuella Azure-datorer Skapa Portal Portal Portal Skapa CLI CLI Skapa PowerShell PowerShell PowerShell I IP-brandväggsregel på servernivå Anslutning från en virtuell dator I Anslutning från lokal plats Anslut till en SQL Server instans Läsa in data AdventureWorks som lästs in per snabbstart Återställa Wide World Importers Återställa Wide World Importers Läsa in data Återställa eller importera Adventure Works från en BACPAC-fil från GitHub Återställa eller importera Adventure Works från en BACPAC-fil från GitHub Viktigt
Skripten i den här artikeln skrivs för att använda Adventure Works-databasen. Med en SQL-instans måste du antingen importera Adventure Works-databasen till en instansdatabas eller ändra skripten i den här artikeln för att använda Wide World Importers-databasen.
Golang och relaterad programvara för ditt operativsystem installerat:
Hämta information om serveranslutning
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 Hanterad Azure SQL-instans eller SQL Server på en virtuell Azure-dator. Om du vill kopiera servernamnet eller värdnamnet hovrar du över det och väljer ikonen Kopiera.
Anteckning
Anslutningsinformation för SQL Server virtuell Azure-dator finns i Anslut till en SQL Server instans.
Skapa Golang-projekt och beroenden
Skapa från terminalen en ny projektmapp med namnet SqlServerSample.
mkdir SqlServerSampleGå till SqlServerSample och installera SQL Server-drivrutinen för Go.
cd SqlServerSample go get github.com/denisenkom/go-mssqldb
Skapa exempeldata
I en textredigerare skapar du en fil med namnet CreateTestData.sql i mappen SqlServerSample. 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'Tom', N'Germany'); GO SELECT * FROM TestSchema.Employees; GOAnvänd
sqlcmdför att ansluta till databasen och köra ditt nyligen skapade Azure SQL skript. Ersätt lämpliga värden för din server, databas, användarnamn och lösenord.sqlcmd -S <your_server>.database.windows.net -U <your_username> -P <your_password> -d <your_database> -i ./CreateTestData.sql
Infoga kod för att fråga databasen
Skapa en fil med namnet sample.go i mappen SqlServerSample.
Klistra in den här koden i filen. Lägg till värden för din server, databas, användarnamn och lösenord. I det här exemplet används Golang-kontextmetoderna för att kontrollera att det finns en aktiv anslutning.
package main import ( _ "github.com/denisenkom/go-mssqldb" "database/sql" "context" "log" "fmt" "errors" ) var db *sql.DB var server = "<your_server.database.windows.net>" var port = 1433 var user = "<your_username>" var password = "<your_password>" var database = "<your_database>" func main() { // Build connection string connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;", server, user, password, port, database) var err error // Create connection pool db, err = sql.Open("sqlserver", 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() }
Kör koden
Kör följande kommando i kommandotolken.
go run sample.goVerifiera utdata.
Connected! Inserted ID: 4 successfully. ID: 1, Name: Jared, Location: Australia ID: 2, Name: Nikita, Location: India ID: 3, Name: Tom, Location: Germany ID: 4, Name: Jake, Location: United States Read 4 row(s) successfully. Updated 1 row(s) successfully. Deleted 1 row(s) successfully.