Mulai cepat: Menggunakan Golang untuk mengkueri database di Azure SQL Database atau Azure SQL Managed Instance
Berlaku untuk: Azure SQL Database Azure SQL Managed Instance
Dalam mulai cepat ini, Anda akan menggunakan bahasa pemrograman Golang untuk menyambungkan ke database Azure SQL, atau database di Azure SQL Managed Instance, dengan driver go-mssqldb . Sampel mengkueri dan memodifikasi data dengan pernyataan Transact-SQL (T-SQL) eksplisit. Golang adalah bahasa pemrogram sumber terbuka yang memudahkan Anda untuk membangun perangkat lunak yang sederhana, andal, dan efisien.
Prasyarat
Untuk menyelesaikan mulai cepat ini, Anda memerlukan:
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Database Azure SQL atau database di Azure SQL Managed Instance. Anda bisa menggunakan salah satu mulai cepat ini untuk membuat database:
SQL Database Instans Terkelola SQL SQL Server di VM Azure Buat Portal Portal Portal CLI CLI PowerShell PowerShell PowerShell Konfigurasikan Aturan firewall IP tingkat server Konektivitas dari komputer virtual Konektivitas dari lokal Menyambungkan ke instans SQL Server Memuat data AdventureWorks2022
dimuat per mulai cepatPulihkan WideWorldImporters Pulihkan WideWorldImporters Memulihkan atau mengimpor AdventureWorks2022
dari file BACPAC dari GitHubMemulihkan atau mengimpor AdventureWorks2022
dari file BACPAC dari GitHubPenting
Skrip dalam artikel ini ditulis untuk menggunakan
AdventureWorks2022
database. Dengan instans terkelola SQL, Anda harus mengimporAdventureWorks2022
database ke database instans atau memodifikasi skrip dalam artikel ini untuk menggunakan database Wide World Importers.Buka dan perangkat lunak terkait untuk sistem operasi Anda yang terinstal.
Versi terbaru sqlcmd untuk sistem operasi Anda terinstal.
Modul Azure PowerShell Az untuk sistem operasi Anda terinstal.
Dapatkan informasi koneksi server
Dapatkan informasi koneksi yang Anda perlukan untuk menyambungkan ke database. Anda akan memerlukan nama server atau nama host, nama database, dan informasi login yang sepenuhnya memenuhi syarat untuk prosedur yang akan datang.
Masuk ke portal Azure.
Buka halaman SQL Database atau SQL Managed Instances.
Pada halaman Ringkasan, tinjau nama server yang sepenuhnya memenuhi syarat di samping Nama server untuk database di Azure SQL Database atau nama server (atau alamat IP) yang sepenuhnya memenuhi syarat di samping Host untuk Azure SQL Managed Instance atau SQL Server di VM Azure. Untuk menyalin nama server atau nama host, arahkan mouse ke atasnya dan pilih ikon Salin.
Catatan
Untuk informasi koneksi untuk SQL Server di Azure VM, lihat Menyambungkan ke instans SQL Server.
Membuat folder baru untuk proyek dan dependensi Golang
Dari terminal, buat folder proyek baru yang disebut
SqlServerSample
.mkdir SqlServerSample
Membuat data sampel
Di editor teks, buat file yang disebut
CreateTestData.sql
diSqlServerSample
folder . Dalam file, tempelkan kode T-SQL ini, yang membuat skema, tabel, dan menyisipkan beberapa baris.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
Pada prompt perintah, navigasi ke
SqlServerSample
dan gunakansqlcmd
untuk menyambungkan ke database dan jalankan skrip Azure SQL yang baru dibuat. Ganti nilai yang sesuai untuk server dan database Anda.az login sqlcmd -S <your_server>.database.windows.net -G -d <your_database> -i ./CreateTestData.sql
Menyisipkan kode untuk mengkueri database
Buat file bernama
sample.go
diSqlServerSample
folder .Dalam file, tempelkan kode ini. Tambahkan nilai untuk server dan database Anda. Contoh ini menggunakan metode konteks Golang untuk memastikan ada koneksi aktif.
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() }
Dapatkan dependensi proyek Golang dan jalankan kode
Pada prompt perintah, navigasikan ke
SqlServerSample
dan instal driver SQL Server untuk Go dengan menjalankan perintah berikut.go mod init SqlServerSample go mod tidy
Pada prompt perintah, jalankan perintah berikut ini.
az login go run sample.go
Verifikasi output.
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.