无法使用Golang从SQL Server查询数据-出现错误“无效的对象名称”

时间:2019-12-27 10:44:35

标签: sql-server go go-gorm

我正在尝试使用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

任何帮助将不胜感激。

1 个答案:

答案 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)

    ....
}