【问题标题】:Inserting DateTime value into MS SQL using golang使用 golang 将 DateTime 值插入 MS SQL
【发布时间】:2021-01-04 19:41:05
【问题描述】:

我正在尝试使用 golang 将 DateTime 值插入到 MS SQL 表中。 SQL表是这样的结构:

CREATE TABLE dbo.TimeSample (
    ModifiedDate datetime
);

我的golang代码是这样的:

func timeSample(db *sql.DB) (error) {
    ctx := context.Background()
    var err error

    t := time.Now().Format(time.RFC3339)
    fmt.Println(t)
    tsql := fmt.Sprintf("INSERT INTO [dbo].[TimeSample] ([ModifiedDate]) VALUES ('%s');",time.Now().Format(time.RFC3339))

    // Execute non-query
    result, err := db.ExecContext(ctx, tsql)
    if err != nil {
        log.Fatal("Error inserting new row: " + err.Error())
        return err
    }

    fmt.Println(result)

    return nil
}

尝试插入时出现以下错误:

2018-04-20T10:39:30-05:00 2018/04/20 10:39:30 插入新行时出错:mssql:从字符串转换日期和/或时间时转换失败。 退出状态 1

关于我应该如何格式化它以适用于 MS SQL 的任何想法?

【问题讨论】:

  • 只需使用参数化 SQL 并让驱动程序负责转换。

标签: go


【解决方案1】:

要详细说明我的评论,您应该做的是使用参数化 SQL - 它不仅负责将时间值转换为正确的格式,还可以防止 SQL 注入攻击。通常 SQL 参数由? 表示,但有些驱动程序使用$1:name,因此请查看驱动程序的文档。然后您的代码将如下所示:

tsql := "INSERT INTO [dbo].[TimeSample] ([ModifiedDate]) VALUES (?)"
result, err := db.ExecContext(ctx, tsql, time.Now())

请注意,您也不想在 SQL 字符串中终止 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2011-04-01
    • 2016-01-14
    • 1970-01-01
    相关资源
    最近更新 更多