ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ db.sqlDB.Query () ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Β«Π‘Π»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉΒ». ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Ρ ΡΠ³Π»ΡΠ±Π»ΡΡΡ Π² ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΌΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π΅ΡΡΡ Π»ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΡΡΠ»ΠΈ?
013/07/23 03:05:35 yy.UpdateThingy () db.go: 264 [ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π²ΡΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΠΈΡΡ Π² XXXX: ΠΡΠΈΠ±ΠΊΠ° 1040: Π‘Π»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ]
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²Π΅ΡΡΠΈΡ 1.1.1:
go Π²Π΅ΡΡΠΈΡ go1.1.1 linux / 386
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²Π΅ΡΡΠΈΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° mysql:
v1.0.1
ΠΠ΅ΡΡΠΈΡ MySql:
ΠΠ΅ΡΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°: 5.5.22-0ubuntu1 (Ubuntu)
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠΎΠΈΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ²:
ΡΡΡΠΎΠΊΠΈ, err =
db.sqlDB.Query ("Π²ΡΡΠ°Π²ΠΈΡΡ Π² XXXX (yyyy) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (?)",
connect.ZZZZ)
if err! = nil {
_ = rows.Close ();
Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΎΡΠΈΠ±ΠΊΠ°
}
_ = rows.Close ();
Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» rows.Close (), Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ Π±Π΅Π· ΠΊΡΠ±ΠΈΠΊΠΎΠ².
Π Π²Π°ΡΠ΅ΠΌΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΌΠΎΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ "rows.Scan", Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Ρ.
ΠΠ·Π³Π»ΡΠ½ΠΈΡΠ΅ ΡΡΠ΄Π°: https://github.com/VividCortex/go-database-sql-tutorial
ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ .Query, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ .Exec.
Π£ Π²Π°Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΡΡΠ½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ database / sql Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² Π±ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ. ΠΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ / Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ Π±Ρ Π»ΡΡΡΠ΅ΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ.
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΠ΅ rows
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ db.Query
ΠΈΠ»ΠΈ Π·Π°Π±ΡΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ (Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
/ sql tx api ).
ΠΠΎΠΉ ΠΎΠ±ΡΠΈΠΉ ΡΠΎΠ²Π΅Ρ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
db.Exec
Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Scan
). ΠΠΎΡΠ»Π΅ ΠΊΠ°Π·Π½ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΌ.db.QueryRow
Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ΅ΠΏΠ½ΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ , Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠ΅ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡdb.Query
Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ. ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²Ρ Β«ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΠ»ΠΈΒ» ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΏΡΠΎΡΠΈΡΠ°Π² Π²ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ (ΡΠΈΠΊΠ» rows.Next
) ΠΈΠ»ΠΈ Π²ΡΠ·Π²Π°Π² rows.Close
. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ ΠΎΡΠ»ΠΎΠΆΠΈΡΡ Π²ΡΠ·ΠΎΠ² rows.Close
. ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
ΠΈ Ρ. Π.Π― ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» "db.Query ()" Π½Π° "db.Prepare () ΠΈ db.Exec ()", ΠΈ ΡΡΠΎ ΡΡΡΡΠ°Π½ΠΈΠ»ΠΎ ΠΌΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π±ΡΡΡΡΡΠ΅ ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ.
Π― ΡΠΎΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΡΠΎ.
ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ "db.Prepare () ΠΈ db.Exec ()",
var db * sql.DB
func getdb () * sql.DB {
db, err = sql.Open ("mysql", connArgs)
db.SetMaxIdleConns (100)
Π²Π΅ΡΠ½ΡΡΡ db
}
func foo (db * sql.DB) {
ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ .....
smint, err: = db.Prepare (....)
ΠΎΡΠ»ΠΎΠΆΠΈΡΡ smint.Close ()
smint.Exec (....)
}
func main () {
go func () {
db = get_db ()
ΠΎΡΠ»ΠΎΠΆΠΈΡΡ db.Close ()
foo (db)
} ()
}
ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠΎΠΉΡΠΈ 1.3
----- ΠΡΡ
ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ -----
ΠΡ: liutaihua [email protected]
ΠΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ: go-sql-driver / mysql [email protected]
Π’Π΅ΠΌΠ°: Re: [mysql] Π‘Π»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ (# 111)
ΠΠ°ΡΠ°: 15:43, 16 ΠΈΡΠ»Ρ 2014 Π³.
ΠΈ ... ΠΏΠΎΡΠ΅ΠΌΡ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ?
ΠΡΠ»ΠΈ Π²Π°Ρ ΠΊΠΎΠ΄ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ, main ΠΌΠΎΠΆΠ΅Ρ (ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ) Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π³ΠΎΡΡΡΠΈΠ½Ρ, ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅Ρ.
ΠΡΠΎΡΡΠΎ ΡΠ΄Π°Π»ΠΈΡΠ΅ go func(){
ΠΈ }()
. Π’Π΅Π±Π΅ Π±ΡΠ΄Π΅Ρ Π»ΡΡΡΠ΅.
ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° ΠΌΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠΎΠ΄:
func socke_server () {
Π΄Π»Ρ {
// accept_something_from_socket ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ
go func (some_receive) {
db = get_db ()
ΠΎΡΠ»ΠΎΠΆΠΈΡΡ db.Close ()
foo (db)
}
}
}
func main () {
socke_server ()
}
ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π΄ΠΎΠΌΠ΅Π½Π° Unix (' user: pwd @ unix (/tmp/mysql.sock)/'), ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ.
ΡΠΏΠ°ΡΠΈΠ±ΠΎ ΠΎΡΠ²Π΅Ρ
ΠΡ ΡΠΎΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ - ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.
ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠΈΠΊΠ» ΠΏΡΠΈΠ½ΡΡΠΈΡ Π² ΡΠ°ΠΉΠ» main.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠΉΡΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ Π² ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ.
ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΊΠΎΠ΄ get_db Π² Π²Π΅ΡΡ
Π½ΡΡ ΡΠ°ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΎΡΠ»ΠΎΠΆΠΈΡΠ΅ db.Closer ΡΠ°ΠΌ (ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌ).
ΠΠ΅ ΠΎΡΠΊΡΡΠ²Π°ΠΉΡΠ΅ ΠΈ Π½Π΅ Π·Π°ΠΊΡΡΠ²Π°ΠΉΡΠ΅ ΠΠ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
func handleConnection(db *sql.DB, args...interface{}) {
// do someting.....
// db.Exec("STATEMENT", args...)
}
func main() {
db, err := sql.Open("mysql", connArgs)
if err != nil {
panic(err)
}
db.SetMaxIdleConns(100)
defer db.Close()
for {
// accept connections and pass relevant stuff to handleConnection
go handleConnection(db, nil)
}
}
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΠΏΠΎΠ½ΡΠ»Π°.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ°ΡΠΈΠ°Π½Ρ 1. Π‘Π»ΠΈΡΠΊΠΎΠΌ Π²ΡΡΠΎΠΊΠ°Ρ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°
Π£ Π²Π°Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΡΡΠ½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ database / sql Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² Π±ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ. ΠΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ / Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ Π±Ρ Π»ΡΡΡΠ΅ΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ.
ΠΠ°ΡΠΈΠ°Π½Ρ 2: Π½Π΅Π³Π΅ΡΠΌΠ΅ΡΠΈΡΠ½ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΠ΅
rows
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅db.Query
ΠΈΠ»ΠΈ Π·Π°Π±ΡΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ (Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ / sql tx api ).ΠΠΎΠΉ ΠΎΠ±ΡΠΈΠΉ ΡΠΎΠ²Π΅Ρ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
db.Exec
Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Scan
). ΠΠΎΡΠ»Π΅ ΠΊΠ°Π·Π½ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΌ.db.QueryRow
Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ΅ΠΏΠ½ΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ , Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠ΅ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡdb.Query
Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ. ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²Ρ Β«ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΠ»ΠΈΒ» ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΏΡΠΎΡΠΈΡΠ°Π² Π²ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ (ΡΠΈΠΊΠ»rows.Next
) ΠΈΠ»ΠΈ Π²ΡΠ·Π²Π°Π²rows.Close
. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΎΡΠ»ΠΎΠΆΠΈΡΡ Π²ΡΠ·ΠΎΠ²rows.Close
. ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΈ Ρ. Π.