Files
sql-server-samples/samples/tutorials/go/crud.go
T
2017-06-09 09:09:20 +09:00

117 lines
3.0 KiB
Go

package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/denisenkom/go-mssqldb"
)
var (
server = "localhost"
port = 1433
user = "sa"
password = "your_password"
database = "SampleDB"
)
// CreateEmployee create an employee
func CreateEmployee(db *sql.DB, name string, location string) (int64, error) {
tsql := fmt.Sprintf("INSERT INTO TestSchema.Employees (Name, Location) VALUES ('%s','%s');",
name, location)
result, err := db.Exec(tsql)
if err != nil {
fmt.Println("Error inserting new row: " + err.Error())
return -1, err
}
return result.LastInsertId()
}
// ReadEmployees read all employees
func ReadEmployees(db *sql.DB) (int, error) {
tsql := fmt.Sprintf("SELECT Id, Name, Location FROM TestSchema.Employees;")
rows, err := db.Query(tsql)
if err != nil {
fmt.Println("Error reading rows: " + err.Error())
return -1, err
}
defer rows.Close()
count := 0
for rows.Next() {
var name, location string
var id int
err := rows.Scan(&id, &name, &location)
if err != nil {
fmt.Println("Error reading rows: " + err.Error())
return -1, err
}
fmt.Printf("ID: %d, Name: %s, Location: %s\n", id, name, location)
count++
}
return count, nil
}
// UpdateEmployee update an employee's information
func UpdateEmployee(db *sql.DB, name string, location string) (int64, error) {
tsql := fmt.Sprintf("UPDATE TestSchema.Employees SET Location = '%s' WHERE Name= '%s'",
location, name)
result, err := db.Exec(tsql)
if err != nil {
fmt.Println("Error updating row: " + err.Error())
return -1, err
}
return result.LastInsertId()
}
// DeleteEmployee delete an employee from database
func DeleteEmployee(db *sql.DB, name string) (int64, error) {
tsql := fmt.Sprintf("DELETE FROM TestSchema.Employees WHERE Name='%s';", name)
result, err := db.Exec(tsql)
if err != nil {
fmt.Println("Error deleting row: " + err.Error())
return -1, err
}
return result.RowsAffected()
}
func main() {
// Connect to database
connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;",
server, user, password, port, database)
conn, err := sql.Open("mssql", connString)
if err != nil {
log.Fatal("Open connection failed:", err.Error())
}
fmt.Printf("Connected!\n")
defer conn.Close()
// Create employee
createID, err := CreateEmployee(conn, "Jake", "United States")
if err != nil {
log.Fatal("CreateEmployee failed:", err.Error())
}
fmt.Printf("Inserted ID: %d successfully.\n", createID)
// Read employees
count, err := ReadEmployees(conn)
if err != nil {
log.Fatal("ReadEmployees failed:", err.Error())
}
fmt.Printf("Read %d rows successfully.\n", count)
// Update from database
updateID, err := UpdateEmployee(conn, "Jake", "Poland")
if err != nil {
log.Fatal("UpdateEmployee failed:", err.Error())
}
fmt.Printf("Updated row with ID: %d successfully.\n", updateID)
// Delete from database
rows, err := DeleteEmployee(conn, "Jake")
if err != nil {
log.Fatal("DeleteEmployee failed:", err.Error())
}
fmt.Printf("Deleted %d rows successfully.\n", rows)
}