以下代码的运行环境为:sql server2008; go版本为1.2;
前几天折腾go语言,在自己的电脑上是用的mysql,用了原始的sql语言还有其它的一些orm(例如beedb),连接都没什么问题,不过在连接sql server的时候多少还是有些不足,
这里估计是sql的第三方驱动还不是很完善,貌似对mssql的支持不是很好,这里有一些测试过的代码,可以运行:
-
CREATE TABLE Test
-
(
-
playname NVARCHAR(10) NOT NULL PRIMARY KEY,
-
MATCH INT NOT NULL
-
)
上面是数据库表创建代码,相当简单的一个表,只有两个字段。
-
package main
-
-
import (
-
_ "code.google.com/p/odbc"
-
"database/sql"
-
"fmt"
-
//"github.com/astaxie/beedb"
-
//"github.com/weigj/go-odbc"
-
)
-
-
func main() {
-
db, err := sql.Open("odbc", "driver={sql server};server=.;uid=sa;pwd=123qwe;database=DBTest")
-
if err != nil {
-
fmt.Println(err)
-
return
-
}
-
-
/*stms, err := db.Prepare("INSERT INTO dbo.Test (playname, MATCH ) VALUES ( ?, ? )")
-
_, err = stms.Exec("zk", 23)
-
CheckError(err)*/
-
/*stmt, err := db.Prepare("delete from Test where playname=?")
-
CheckError(err)
-
-
res, err := stmt.Exec("zk")
-
CheckError(err)
-
-
affect, err := res.RowsAffected()
-
CheckError(err)
-
-
fmt.Println(affect)*/
-
-
/*stms, err := db.Prepare("update Test set Match=? where playname=?")
-
_, err = stms.Exec(12, "p")
-
CheckError(err)*/
-
rows, err := db.Query("select MATCH from Test where playname=?", "p")
-
var match int
-
for rows.Next() {
-
rows.Scan(&match)
-
fmt.Println(match)
-
}
-
-
}
-
-
func CheckError(err error) {
-
if err != nil {
-
panic(err)
-
}
-
}
上面就是连接数据库并操作的代码,当时在找mssql驱动的时候用了两个不同的驱动测试,不过貌似这两个都会有点小问题,驱动代码的实现不是很完全有点小bug(也许是我自己代码写的有误导致连接不正确);不过上面的例子都能够正确运行,这里查询和其它的操作不同的是用了Query这个方法,返回rows,就是把每一行返回了,之后调用scan将当前行的每个字段的数据赋给对应的变量。代码比较简单,就是给一个样例而已。在这里比较让我困惑的是sql.Open(....)里面的连接字符串不知道该如何填写,看来不同的数据库貌似连接方式还不一样,没有一个统一的连接方式。运行的时候可以选择测试的操作,然后把注释取消。
阅读(8945) | 评论(0) | 转发(1) |