Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions samples/tutorials/go/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Set up instructions

1. `go get github.com/denisenkom/go-mssqldb`
1. `go install github.com/denisenkom/go-mssqldb`
1. `go run <your_sample>.go`
46 changes: 46 additions & 0 deletions samples/tutorials/go/columnstore.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package main

import _ "github.com/denisenkom/go-mssqldb"
import "database/sql"
import "log"
import "fmt"
import "time"

var server = "localhost"
var port = 1433
var user = "sa"
var password = "your_password"
var database = "SampleDB"

// Delete an employee from database
func ExecuteAggregateStatement(db *sql.DB) {
result, err := db.Prepare("SELECT SUM(Price) as sum FROM Table_with_5M_rows")
if err != nil {
fmt.Println("Error preparing query: " + err.Error())
}

row := result.QueryRow()
var sum string
err = row.Scan(&sum)
fmt.Printf("Sum: %s\n", sum)
}

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()

t1 := time.Now()
fmt.Printf("Start time: %s\n", t1)

ExecuteAggregateStatement(conn)

t2 := time.Since(t1)
fmt.Printf("The query took: %s\n", t2)
}
33 changes: 33 additions & 0 deletions samples/tutorials/go/connect.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package main

import _ "github.com/denisenkom/go-mssqldb"
import "database/sql"
import "log"
import "fmt"


var server = "localhost"
var port = 1433
var user = "sa"
var password = "your_password"

func main() {
connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d",
server, user, password, port)

conn, err := sql.Open("mssql", connString)
if err != nil {
log.Fatal("Open connection failed:", err.Error())
}
fmt.Printf("Connected!\n")
defer conn.Close()
stmt, err := conn.Prepare("select @@version")
row := stmt.QueryRow()
var result string

err = row.Scan(&result)
if err != nil {
log.Fatal("Scan failed:", err.Error())
}
fmt.Printf("%s\n", result)
}
99 changes: 99 additions & 0 deletions samples/tutorials/go/crud.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package main

import _ "github.com/denisenkom/go-mssqldb"
import "database/sql"
import "log"
import "fmt"

var server = "localhost"
var port = 1433
var user = "sa"
var password = "your_password"
var database = "SampleDB"

// 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()
}

// 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()
var count int = 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
}

// 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()
}

// 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")
fmt.Printf("Inserted ID: %d successfully.\n", createId)

// Read employees
count, err := ReadEmployees(conn)
fmt.Printf("Read %d rows successfully.\n", count)

// Update from database
updateId, err := UpdateEmployee(conn, "Jake", "Poland")
fmt.Printf("Updated row with ID: %d successfully.\n", updateId)

// Delete from database
rows, err := DeleteEmployee(conn, "Jake")
fmt.Printf("Deleted %d rows successfully.\n", rows)
}
98 changes: 98 additions & 0 deletions samples/tutorials/go/orm.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package main

import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mssql"
)

var server = "localhost"
var port = 1433
var user = "sa"
var password = "your_password"
var database = "SampleDB"

type User struct {
gorm.Model
FirstName string
LastName string
}

type Task struct {
gorm.Model
Title string
DueDate string
IsComplete bool
UserID uint
}

func ReadAllTasks(db *gorm.DB){
var users []User
var tasks []Task
db.Find(&users)

for _, user := range users{
db.Model(&user).Related(&tasks)
fmt.Printf("%s %s's tasks:\n", user.FirstName, user.LastName)
for _, task := range tasks {
fmt.Printf("Title: %s\nDueDate: %s\nIsComplete:%t\n\n",
task.Title, task.DueDate, task.IsComplete)
}
}
}

func UpdateSomeonesTask(db *gorm.DB, userId int){
var task Task
db.Where("user_id = ?", userId).First(&task).Update("Title", "Buy donuts for Luis")
fmt.Printf("Title: %s\nDueDate: %s\nIsComplete:%t\n\n",
task.Title, task.DueDate, task.IsComplete)
}

func DeleteSomeonesTasks(db *gorm.DB, userId int){
db.Where("user_id = ?", userId).Delete(&Task{})
fmt.Printf("Deleted all tasks for user %d", userId)
}

func main() {
connectionString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s",
server, user, password, port, database)
db, err := gorm.Open("mssql", connectionString)

if err != nil {
panic("failed to connect database")
}
gorm.DefaultCallback.Create().Remove("mssql:set_identity_insert")
defer db.Close()

fmt.Println("Migrating models...")
db.AutoMigrate(&User{})
db.AutoMigrate(&Task{})

// Create awesome Users
fmt.Println("Creating awesome users...")
db.Create(&User{FirstName: "Andrea", LastName: "Lam"}) //UserID: 1
db.Create(&User{FirstName: "Meet", LastName: "Bhagdev"}) //UserID: 2
db.Create(&User{FirstName: "Luis", LastName: "Bosquez"}) //UserID: 3

// Create appropriate Tasks for each user
fmt.Println("Creating new appropriate tasks...")
db.Create(&Task{
Title: "Do laundry", DueDate: "2017-03-30", IsComplete: false, UserID: 1})
db.Create(&Task{
Title: "Mow the lawn", DueDate: "2017-03-30", IsComplete: false, UserID: 2})
db.Create(&Task{
Title: "Do more laundry", DueDate: "2017-03-30", IsComplete: false, UserID: 3})
db.Create(&Task{
Title: "Watch TV", DueDate: "2017-03-30", IsComplete: false, UserID: 3})

// Read
fmt.Println("Reading all the tasks...")
ReadAllTasks(db)

// Update - update Task title to something more appropriate
fmt.Println("Updating Andrea's task...")
UpdateSomeonesTask(db, 1)

// Delete - delete Luis's task
DeleteSomeonesTasks(db, 3)
}