Quickstart: Golang gebruiken om een query uit te voeren op een database in Azure SQL Database or Azure SQL Managed Instance
VAN TOEPASSING OP:
Azure SQL Database
Azure SQL Managed Instance
In deze quickstart gebruikt u de programmeertaal Golang om verbinding te maken met een database in Azure SQL Database of Azure SQL Managed Instance. Voer vervolgens Transact-SQL-instructies uit om query's uit te voeren voor gegevens en om gegevens te bewerken. Golang is een open-sourceprogrammeertaal waarmee u op een simpele manier eenvoudige, betrouwbare en efficiënte software kunt maken.
Vereisten
U hebt het volgende nodig om deze quickstart te voltooien:
Een Azure-account met een actief abonnement. Gratis een account maken
Een database in Azure SQL Database of Azure SQL Managed Instance. U kunt een van deze quickstarts gebruiken om een database te maken:
SQL Database SQL Managed Instance SQL Server op virtuele Azure-machine Maken Portal Portal Portal Maken CLI CLI Maken PowerShell PowerShell PowerShell Configureren IP-firewallregel op serverniveau Connectiviteit vanaf een VM Configureren Connectiviteit vanaf on-premises Verbinding maken met een SQL Server-exemplaar Gegevens laden Adventure Works geladen volgens de quickstart Wide World Importers herstellen Wide World Importers herstellen Gegevens laden Adventure Works herstellen of importeren uit een BACPAC-bestand vanuit GitHub Adventure Works herstellen of importeren uit een BACPAC-bestand vanuit GitHub Belangrijk
De scripts in dit artikel zijn geschreven voor gebruik met de Adventure Works-database. Met een met SQL beheerd exemplaar moet u de Adventure Works-database in een exemplaardatabase importeren of de scripts in dit artikel wijzigen zodat deze de Wide World Importers-database gebruiken.
Golang en verwante software geïnstalleerd voor uw besturingssysteem:
Serververbindingsgegevens ophalen
Haal de verbindingsgegevens op die u nodig hebt om verbinding te maken met de database. U hebt de volledig gekwalificeerde servernaam of hostnaam, databasenaam en aanmeldingsgegevens nodig voor de volgende procedures.
Meld u aan bij de Azure-portal.
Navigeer naar de pagina SQL Databases of SQL Managed Instances.
Bekijk op de pagina Overzicht de volledig gekwalificeerde servernaam naast Servernaam voor een database in Azure SQL Database of de volledig gekwalificeerde servernaam (of het IP-adres) naast Host voor een met Azure SQL beheerd exemplaar of SQL-server op een Azure-VM. Als u de servernaam of hostnaam wilt kopiëren, plaatst u de muisaanwijzer erboven en selecteert u het pictogram Kopiëren.
Notitie
Zie Verbinding met een SQL Server-exemplaar voor meer informatie over de verbinding van SQL Server op een Azure-VM.
Golang-project en -afhankelijkheden maken
Maak vanaf de terminal een nieuwe projectmap met de naam SqlServerSample.
mkdir SqlServerSampleNavigeer naar SqlServerSample en installeer het SQL Server-stuurprogramma voor Go.
cd SqlServerSample go get github.com/denisenkom/go-mssqldb
Voorbeeldgegevens maken
Maak in een teksteditor een bestand met de naam CreateTestData.sql in de map SqlServerSample. In het bestand plakt u deze T-SQL-code, waarmee u een schema en een tabel maakt en enkele rijen invoegt.
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; GOGebruik
sqlcmdom verbinding te maken met de database en voer uw zojuist gemaakte Azure SQL-script uit. Gebruik de juiste waarden voor uw server, database, gebruikersnaam en wachtwoord.sqlcmd -S <your_server>.database.windows.net -U <your_username> -P <your_password> -d <your_database> -i ./CreateTestData.sql
Code invoegen om een query uit te voeren op de database
Maak een bestand met de naam sample.go in de map SqlServerSample.
Plak deze code in het bestand. Voeg de waarden toe voor uw server, database, gebruikersnaam en wachtwoord. In dit voorbeeld worden de Golang-contextmethoden gebruikt om te zorgen voor een actieve verbinding.
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() }
De code uitvoeren
Voer bij de opdrachtprompt de volgende opdracht uit.
go run sample.goControleer de uitvoer.
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.