ZBLOG

gorm.io/driver/sqlserver

在 GORM 中使用 Microsoft SQL Server 数据库时,需要通过官方提供的 gorm.io/driver/sqlserver 驱动进行连接。以下是详细的使用指南和示例代码:


1. 安装驱动

在项目中导入 SQL Server 驱动:

go get gorm.io/driver/sqlserver
go get gorm.io/gorm

2. 连接数据库

基本连接格式

SQL Server 的连接字符串(DSN)通常包含以下参数:

  • server: 服务器地址(含端口,默认 1433
  • user id: 用户名
  • password: 密码
  • database: 数据库名
import (
    "gorm.io/driver/sqlserver"
    "gorm.io/gorm"
)

func main() {
    // DSN 格式: sqlserver://username:password@host:port?database=dbname
    dsn := "sqlserver://sa:your_password@localhost:1433?database=gorm_db"
    db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("Failed to connect to SQL Server")
    }
}

3. 配置选项

(1) 自定义连接参数

通过 DSN 添加额外参数(如加密、超时等):

dsn := "sqlserver://sa:your_password@localhost:1433?database=gorm_db&encrypt=disable&connection+timeout=30"

(2) GORM 配置

启用日志、跳过默认事务等:

db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{
    Logger: logger.Default.LogMode(logger.Info), // 打印 SQL 日志
    SkipDefaultTransaction: true,               // 禁用默认事务
})

4. CRUD 操作示例

(1) 定义模型

type User struct {
    ID       uint   `gorm:"primaryKey"`
    Name     string `gorm:"size:50"`
    Age      int
}

(2) AutoMigrate (自动迁移表)

db.AutoMigrate(&User{}) // 创建或更新表结构

(3) Insert (插入数据)

user := User{Name: "Alice", Age: 25}
result := db.Create(&user)
if result.Error != nil {
    panic(result.Error)
}

(4) Query (查询数据)

var users []User
db.Where("age > ?", 20).Find(&users)

5. SQL Server特有功能支持

(1) JSON/Array类型字段

如果使用 SQL Server JSON/Array,需手动处理序列化:

type Product struct {
    Attributes datatypes.JSON `json:"attributes"` // gorm.io/datatypes.JSON 
}

// JSON字段写入/读取示例:
product := Product{Attributes: datatypes.JSON(`{"color": "red"}`)}
db.Create(&product)

(2) OpenQuery/LinkedServer调用

通过 Raw SQL:

db.Raw("SELECT * FROM OPENQUERY(linked_server, 'SELECT * FROM remote_table')").Scan(&results)

6.注意事项

  1. 身份验证模式:确保服务器启用了混合认证(SQL + Windows)。
  2. 端口与防火墙:默认端口为 1433,需开放防火墙。
  3. GORM版本兼容性:建议使用最新版 GORM (v1.25+)。
  4. 批量插入优化:SQL Server的批量插入可能需要调整批大小:
     
    db.CreateInBatches(users, batchSize)
    

如果需要更复杂的操作(如存储过程调用),可以直接使用原生 SQL:

db.Raw("EXEC sp_my_procedure @param1 = ?", value).Scan(&result)

遇到具体问题时,可以提供更多细节进一步讨论!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23942

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?