Golang中如何获取SQL Server存储过程的错误信息
Golang中如何获取SQL Server存储过程的错误信息 我有一个存储过程,在某些条件失败时会返回多个错误。我该如何捕获这些错误?因为每当过程失败时,它总是返回一个运行时错误:无效的内存地址或空指针解引用,但从未返回错误本身。
4 回复
你应该在这里分享一些代码。
– 你肯定在某个地方使用了 nil 变量?
更多关于Golang中如何获取SQL Server存储过程的错误信息的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
嗨,@Mynor2397,这个错误并非来自存储过程,而是来自你Go程序的某个地方。正如 @kync 所说,你应该展示一下代码,我们才能帮助你。
在Golang中捕获SQL Server存储过程的错误信息,需要使用sql.Rows的Err()方法或检查sql.Result的错误。以下是示例代码:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/denisenkom/go-mssqldb"
)
func main() {
connString := "server=localhost;user id=sa;password=your_password;database=your_db"
db, err := sql.Open("mssql", connString)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 方法1:使用Query执行存储过程并检查Rows错误
rows, err := db.Query("EXEC YourStoredProc @param1, @param2", "value1", "value2")
if err != nil {
log.Fatal("执行错误:", err)
}
defer rows.Close()
// 检查Rows中的错误(包括存储过程返回的错误)
if err := rows.Err(); err != nil {
fmt.Println("存储过程错误:", err)
}
// 方法2:使用Exec并检查Result
result, err := db.Exec("EXEC YourStoredProc @param1", "value1")
if err != nil {
fmt.Println("执行错误:", err)
}
// 获取受影响行数(可选)
rowsAffected, _ := result.RowsAffected()
fmt.Printf("受影响行数: %d\n", rowsAffected)
}
对于返回多个错误的存储过程,需要确保在T-SQL中使用RAISERROR或THROW语句,并在Go中通过循环读取所有错误:
// 处理多个错误
for rows.Next() {
var errorMsg string
if err := rows.Scan(&errorMsg); err != nil {
log.Println("扫描错误:", err)
}
fmt.Println("错误信息:", errorMsg)
}
// 再次检查Rows错误
if err := rows.Err(); err != nil {
fmt.Println("最终错误:", err)
}
如果遇到空指针解引用错误,请检查数据库连接是否成功建立,并确保存储过程名称和参数正确。


