-
Notifications
You must be signed in to change notification settings - Fork 9.1k
Expand file tree
/
Copy pathcrud.go
More file actions
116 lines (104 loc) · 3 KB
/
crud.go
File metadata and controls
116 lines (104 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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)
}