0

Go を使用して CSV ファイルを読み取り、go-odbc を使用して MS SQL データベースにレコードを保存しています。うまく機能しますが、一部のレコード (約 10 レコード) が保存されないという問題があります。これはランダムな問題です。3 つ保存されない場合もあれば、2 つ保存される場合もあります。すべてのレコードが保存されるfmt.Printf(" ")のは、for ループの最後に置くときだけです。空白を印刷する必要があることに注意してくださいfmt.Printf("")。私は何が間違っていないのかわかりません。どんな提案でも大歓迎です。また、エラーは発生せず、プログラムは正常に終了します。

関連する問題にコードを含めました。コード全体を投稿する必要がある場合はお知らせください。

Go バージョン: go1.1 windows/amd64

for {
    record, err := c.Read()
    if err == io.EOF {
        break
    } else if err != nil {  
        fmt.Printf("Error while reading %s: %s\n", filename, err)
    } else {
        //replace the single quote at the beginning and end of string
        re, err := regexp.Compile("^'|'$")
        params := make([]interface{}, 0, numElements)
        valueHolders := make([]string, 0, numElements)
        tmpFields := make([]string, 0, numElements)
        count := 0

        for i:=1;i<=numElements;i++ {  
            tmp := re.ReplaceAllString(record[i],"")

            //insert only non-empty values
            if len(tmp) > 0 {
                params = params[0:count+1]
                params[count] = tmp

                valueHolders = valueHolders[0:count+1]
                valueHolders[count] = "?"

                tmpFields = tmpFields[0:count+1]
                tmpFields[count] = fieldNames[i-1]

                count++
            }
        }

        query := "insert into [l2test].[dbo]."+tablename+" (" + strings.Join(tmpFields, ",") + ") values (" + strings.Join(valueHolders, ",") + ")"
       stmt, err := dest.Prepare(query)

       if stmt == nil {
           fmt.Printf("Error preparing statment: %s\nQuery: %s\n%v\n\n", err, query, params)
       } else {
          stmt.Execute(params...)
          stmt.Close()
       }
   }

   fmt.Printf(" ")
}
4

1 に答える 1