在一个应用程序中,我有一个全局范围的
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, ×tamp, &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的表,该表包含这三列中的信息......
在进行查询或进行查询之前,我是否还缺少某些内容?
答案 0 :(得分:3)
我检查了数据库,并且有一个名为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")