Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:Azure SQL Database
Azure SQL Managed Instance
Pada panduan cepat ini, Anda akan menggunakan Golang untuk terhubung 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 panduan cepat ini, Anda memerlukan:
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Database Azure SQL atau database di Azure SQL Managed Instance. Anda dapat menggunakan salah satu panduan 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 AdventureWorks2022dimuat sesuai panduan mulai cepatPulihkan WideWorldImporters Pulihkan WideWorldImporters Memulihkan atau mengimpor AdventureWorks2022dari file BACPAC dari GitHubMemulihkan atau mengimpor AdventureWorks2022dari file BACPAC dari GitHubPenting
Skrip dalam artikel ini ditulis untuk menggunakan
AdventureWorks2022database. Dengan instans terkelola SQL, Anda harus mengimporAdventureWorks2022database ke database instans atau memodifikasi skrip dalam artikel ini untuk menggunakan database Wide World Importers.Go dan perangkat lunak terkait yang sudah terpasang untuk sistem operasi Anda.
Versi sqlcmd terbaru untuk sistem operasi Anda telah terpasang.
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.sqldiSqlServerSamplefolder . 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; GOPada prompt perintah, navigasi ke
SqlServerSampledan gunakansqlcmduntuk 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.godiSqlServerSamplefolder .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
SqlServerSampledan instal driver SQL Server untuk Go dengan menjalankan perintah berikut.go mod init SqlServerSample go mod tidyPada prompt perintah, jalankan perintah berikut ini.
az login go run sample.goVerifikasi hasil keluaran.
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.