代码之家  ›  专栏  ›  技术社区  ›  Flea Chetan Bhalara

使用golang将DateTime值插入MS SQL

go
  •  0
  • Flea Chetan Bhalara  · 技术社区  · 8 年前

    我试图使用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年4月20日10:39:30插入新行时出错:mssql:从字符串转换日期和/或时间时转换失败。 退出状态1

    你知道我应该如何格式化它以用于MS SQL吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   ain    8 年前

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

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

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