Hızlı Başlangıç: Azure SQL Veritabanı veya Azure Yönetilen Örneği'SQL Golang kullanma
Uygulama hedefi:
Azure SQL Veritabanı
Azure SQL yönetilen örneği
Bu hızlı başlangıçta Golang programlama dilini kullanarak Azure SQL Veritabanı veya Azure SQL Yönetilen Örneği'ne bağlanabilirsiniz. Ardından Transact-SQL deyimlerini çalıştırarak verileri sorgular ve değiştirirsiniz. Golang basit, güvenilir ve verimli yazılımlar derlemeyi kolaylaştıran açık kaynak bir programlama dilidir.
Önkoşullar
Bu hızlı başlangıcı tamamlamak için aşağıdakilere ihtiyacınız vardır:
Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Azure SQL Veritabanı yönetilen SQL veya Azure veritabanı. Veritabanı oluşturmak için şu hızlı başlangıçlardan birini kullanabilirsiniz:
SQL Veritabanı SQL Yönetilen Örnek Azure VM’lerde SQL Server Oluştur Portal Portal Portal Oluştur CLI CLI Oluştur PowerShell PowerShell PowerShell Yapılandır Sunucu düzeyinde IP güvenlik duvarı kuralı VM'den bağlantı Yapılandır Şirket içi bağlantı Bağlan örneğine SQL Server Veri yükleme Adventure Works hızlı başlangıç başına yüklendi Wide World Importers'i geri yükleme Wide World Importers'i geri yükleme Veri yükleme Adventure Works'i bir BACPAC dosyasından geri yükleme veya içeri GitHub Adventure Works'i bir BACPAC dosyasından geri yükleme veya içeri GitHub Önemli
Bu makaledeki betikler Adventure Works veritabanını kullanmak için yazılmıştır. Bir SQL Örneği ile Adventure Works veritabanını bir örnek veritabanına aktarmanız veya bu makaledeki betikleri Wide World Importers veritabanını kullanmak üzere değiştirmeniz gerekir.
İşletim sisteminiz için Golang ve ilgili yazılımlar yüklü:
Sunucu bağlantı bilgilerini al
Veritabanına bağlanmak için ihtiyacınız olan bağlantı bilgilerini alır. Gelecek yordamlar için tam sunucu adına veya ana bilgisayar adına, veritabanı adına ve oturum açma bilgilerine ihtiyacınız olacak.
Azure Portal oturum açın.
SQL Veritabanları veya Yönetilen SQL sayfasına gidin.
Genel Bakış sayfasında, Azure SQL Veritabanı'deki bir veritabanı için Sunucu adı'nın yanındaki tam sunucu adını veya Azure SQL Yönetilen Örneği için konak veya Azure VM'de SQL Server'nin yanındaki tam sunucu adını (veya IP adresini) gözden geçirebilirsiniz. Sunucu adını veya ana bilgisayar adını kopyalamak için üzerine gelin ve Kopyala simgesini seçin.
Not
Azure VM'sinde SQL Server bağlantı bilgileri için bkz. Bağlan bir SQL Server örneğine.
Golang projesi ve bağımlılıkları oluşturma
Terminalden, SqlServerSample adlı yeni bir proje klasörü oluşturun.
mkdir SqlServerSampleSqlServerSample'a gidin ve Go için SQL Server sürücüsünü yükleyin.
cd SqlServerSample go get github.com/denisenkom/go-mssqldb
Örnek veri oluşturma
Bir metin düzenleyicisinde SqlServerSample klasöründe CreateTestData.sql adlı bir dosya oluşturun. dosyasına bu T-SQL kodunu yapıştırın. Bu kod bir şema, tablo oluşturur ve birkaç satır ekler.
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; GOVeritabanına
sqlcmdbağlanmak ve yeni oluşturduğunuz Azure depolama betiğinizi SQL kullanın. Sunucunuz, veritabanınız, kullanıcı adınız ve parolanız için uygun değerleri değiştirin.sqlcmd -S <your_server>.database.windows.net -U <your_username> -P <your_password> -d <your_database> -i ./CreateTestData.sql
Veritabanını sorgulamak için kod ekleme
SqlServerSample klasöründe sample.go adlı bir dosya oluşturun.
dosyasına bu kodu yapıştırın. Sunucunuz, veritabanınız, kullanıcı adınız ve parolanız için değerleri ekleyin. Bu örnek, etkin bir bağlantı olduğundan emin olmak için Golang bağlam yöntemlerini kullanır.
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() }
Kodu çalıştırma
Komut isteminde aşağıdaki komutu çalıştırın.
go run sample.goÇıktıyı doğrulayın.
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.