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(" ")
}