Guia de início rápido: use o Golang para consultar um banco de dados no Banco de Dados SQL do Azure ou na Instância Gerenciada SQL do Azure
Aplica-se a:Banco de Dados SQL do Azure Instância Gerenciada SQLdo Azure
Neste início rápido, você usará a linguagem de programação Golang para se conectar a um banco de dados SQL do Azure ou a um banco de dados na Instância Gerenciada SQL do Azure com o driver go-mssqldb . O exemplo consulta e modifica dados com instruções explícitas Transact-SQL (T-SQL). Golang é uma linguagem de programação de código aberto que facilita a construção de software simples, confiável e eficiente.
Pré-requisitos
Para concluir este guia de início rápido, necessita de:
Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
Um banco de dados SQL do Azure ou um banco de dados na Instância Gerenciada SQL do Azure. Você pode usar um destes guias de início rápido para criar um banco de dados:
Base de Dados SQL Instância Gerida do SQL SQL Server numa VM do Azure Criar Portal Portal Portal CLI CLI PowerShell PowerShell PowerShell Configurar Regra de firewall IP no nível do servidor Conectividade de uma VM Conectividade local Conectar-se a uma instância do SQL Server Carregar dados AdventureWorks2022
carregado por início rápidoRestaurar WideWorldImporters Restaurar WideWorldImporters Restaurar ou importar AdventureWorks2022
de um arquivo BACPAC do GitHubRestaurar ou importar AdventureWorks2022
de um arquivo BACPAC do GitHubImportante
Os scripts neste artigo são escritos para usar o
AdventureWorks2022
banco de dados. Com uma instância gerenciada SQL, você deve importar o banco de dados para um banco de dados de instância ou modificar os scripts neste artigo para usar oAdventureWorks2022
banco de dados Wide World Imports.Go e software relacionado para o seu sistema operacional instalado.
A versão mais recente do sqlcmd para o seu sistema operacional instalado.
O módulo Az do Azure PowerShell para seu sistema operacional instalado.
Obter informações de conexão do servidor
Obtenha as informações de conexão necessárias para se conectar ao banco de dados. Você precisará do nome do servidor ou nome do host totalmente qualificado, nome do banco de dados e informações de login para os próximos procedimentos.
Inicie sessão no portal do Azure.
Navegue até a página Bancos de Dados SQL ou Instâncias Gerenciadas SQL .
Na página Visão Geral, revise o nome do servidor totalmente qualificado ao lado de Nome do servidor para um banco de dados no Banco de Dados SQL do Azure ou o nome do servidor totalmente qualificado (ou endereço IP) ao lado de Host para uma Instância Gerenciada SQL do Azure ou SQL Server na VM do Azure. Para copiar o nome do servidor ou do host, passe o mouse sobre ele e selecione o ícone Copiar .
Nota
Para obter informações de conexão para o SQL Server na VM do Azure, consulte Conectar-se a uma instância do SQL Server.
Criar uma nova pasta para o projeto Golang e dependências
A partir do terminal, crie uma nova pasta de projeto chamada
SqlServerSample
.mkdir SqlServerSample
Criar dados de exemplo
Em um editor de texto, crie um arquivo chamado
CreateTestData.sql
naSqlServerSample
pasta. No arquivo, cole esse código T-SQL, que cria um esquema, uma tabela e insere algumas linhas.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
No prompt de comando, navegue e use
sqlcmd
para se conectar ao banco de dados eSqlServerSample
executar seu script SQL do Azure recém-criado. Substitua os valores apropriados para o servidor e o banco de dados.az login sqlcmd -S <your_server>.database.windows.net -G -d <your_database> -i ./CreateTestData.sql
Inserir código para consultar o banco de dados
Crie um arquivo nomeado
sample.go
naSqlServerSample
pasta.No ficheiro, cole este código. Adicione os valores para o servidor e o banco de dados. Este exemplo usa os métodos de contexto Golang para garantir que haja uma conexão ativa.
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() }
Obter dependências do projeto Golang e executar o código
No prompt de comando, navegue até
SqlServerSample
o driver do SQL Server para Go e instale-o executando os seguintes comandos.go mod init SqlServerSample go mod tidy
No prompt de comando, execute o seguinte comando.
az login go run sample.go
Verifique o resultado.
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.
Conteúdos relacionados
- Tutorial: Criar um banco de dados relacional no Banco de Dados SQL do Azure usando o SSMS
- Driver Golang para SQL Server
- Report issues or ask questions (Comunicar problemas ou fazer perguntas)