我正在尝试使用Golang和GORM从SQL Server查询数据。但是我遇到了以下错误:-
DB Connection: &{{{0 0} 0 0 0 0} <nil> <nil> 0 0xc0000a4480 false 0 {0xc0000e5db0} <nil> {{0 0} {<nil>} map[] 0} 0xc00004c5b0 0xaccbe0 0xc00014d0a0 false <nil>}
HasTable- Currency: true
{CurrencyId:0 Code: Description:}
[35m(C:/Users/RahulBFL/Documents/architechbc/dot net/GORM/main.go:26)[0m
[33m[2019-12-27 15:56:13][0m [31;1m mssql: Invalid object name 'currencies'. [0m
我的表架构如下所示:-
Currency
CurrencyId int
Code char
Description varchar
在SSMS上,我可以使用以下命令成功查询表
select * from IMBookingApp.dbo.Currency
我的Golang代码
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mssql"
)
type Currency struct {
CurrencyId int
Code string
Description string
}
func main() {
db, err := gorm.Open("mssql", "sqlserver://USERNAME:PASSWORD@Endpoint:1433?database=DATABASENAME&Initial+Catalog=SCHEMA_NAME")
if err != nil {
fmt.Println("Connection Error:", err)
}
fmt.Println("DB Connection", db)
fmt.Println("HasTable- Currency:", db.HasTable("ClientUser"))
var Currency Currency
db.Find(&Currency)
fmt.Printf("%+v\n", Currency)
defer db.Close()
}
我不明白为什么会收到错误消息-无效的对象名称“ currencies”。尽管架构中没有 currencies ,但只有 currency 。
任何帮助将不胜感激。
答案 0 :(得分:2)
如果检查错误Invalid object name 'currencies'
,它将尝试查找名为currencies
的表。默认情况下,gorm会使表名复数。如果您想要一个自定义表名,则可以如下定义它:
func (Currency) TableName() string {
return "currency"
}
或者您可以使用:
全局禁用它db.SingularTable(true)
所以您的示例应如下所示:
type Currency struct {
CurrencyId int
Code string
Description string
CreateDate time.Time
}
func (Currency) TableName() string {
return "currency"
}
func main() {
db, err := gorm.Open("mssql", "sqls*******talog=dbo")
db.SingularTable(true)
fmt.Println("db.HasTable: Currency:", db.HasTable("ClientUser"))
var Currency []Currency
db.Find(&Currency)
....
}