繁体   English   中英

Golang mssql驱动程序返回“ mssql:无效的对象名称”

[英]Golang mssql driver returns “mssql: Invalid object name”

在一个应用程序中,我有一个全局范围

var db *sql.DB

后来被称为

slcstrSource, slcint64Timestamp, slcstrContent, err := DB_functions.GetContent(db)
            if err != nil {
                 fmt.Println("Error: " + err.Error())
            }

GetContent是这样的:

func GetContent(db *sql.DB) ([]string, []int64, []string, error) {

    var slcstrContent []string
    var slcint64Timestamp []int64
    var slcstrSource []string

    // Run the query
    rows, err := db.Query("SELECT source, timestamp, content FROM MyDatabase.MyTable")
    if err != nil {
            return slcstrSource, slcint64Timestamp, slcstrContent, err
    }
    defer rows.Close()

    for rows.Next() {

            // Holding variables for the content in the columns
            var source, content string
            var timestamp int64

            // Get the results of the query
            err := rows.Scan(&source, &timestamp, &content)
            if err != nil {
                    return slcstrSource, slcint64Timestamp, slcstrContent, err
            }

            // Append them into the slices that will eventually be returned to the caller
            slcstrSource = append(slcstrSource, source)
            slcstrContent = append(slcstrContent, content)
            slcint64Timestamp = append(slcint64Timestamp, timestamp)
    }

    return slcstrSource, slcint64Timestamp, slcstrContent, nil
}

当我运行该应用程序并且命中了这些代码段时,我得到:

Error: mssql: Invalid object name 'MyDatabase.MyTable'.

当我db.Ping()数据库时,它似乎可以工作。 从我缩小的范围来看,错误是在查询中发生的,但是我找不到问题所在。 我检查了数据库,然后有一个名为MyDatabase的数据库和一个名为MyTable的表,并且该表在这三列中都有信息...

在进行查询之前或进行查询时,我是否缺少某些东西?

我检查了数据库,然后有一个名为MyDatabase的数据库和一个名为MyTable的表,并且该表在这三列中都有信息...

似乎驱动程序正在按应有的方式工作。 为了在SQL Server中查询表,您应该使用[Database].[Schema].[TableName] 如果尚未为表定义特定的架构名称,则默认情况下将在dbo架构下创建该名称。 不用说,您实际上不需要在查询中指定数据库名称。 您宁可在连接字符串上定义它。 我不确定您如何定义连接详细信息,但请查看以下内容并相应地适应您的需求。

var (
    debug = flag.Bool("debug", false, "enable debugging")
    password = flag.String("password", "mypwd", "the database password")
    port *int = flag.Int("port", 1433, "the database port")
    server = flag.String("server", "MyServer", "the database server")
    user = flag.String("user", "MyUser", "the database user")
    connStr = fmt.Sprintf("server=%s;Initial Catalog=MySchema;userid=%s;password=%s;port=%d", *server, *user, *password, *port)
        )

    func main() {
        db, err := sql.Open("mssql", connStr)
    }

然后您可以像这样查询表:

rows, err := db.Query("SELECT source, timestamp, content FROM MySchema.MyTable")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM