2017-07-14 39 views
0

我的程序讀入一個sql文件並對數據庫執行操作。一個文件兩個不同的輸出 - Windows Server 2012

昨天我通過記事本在服務器上編輯了一個sql文件。

我今天再次通過記事本在同一個文件上做了一個更改。

當程序讀入文件時,我對sql的更改不存在。

將sql內容打印到控制檯顯示該二進制文件正在從昨天的版本讀取。

這裏玩什麼黑魔法?

刪除文件不起作用。

如果我再次創建Date created時間戳是從1個月前。 Date modified來自昨天。

在記事本中打開文件,任何文本閱讀器你可以想到的wordpad顯示正確的內容。

Binary從昨天開始讀取版本。

這是二進制如何讀取文件

file, err := ioutil.ReadFile("appointment.sql") 
if err != nil { 
    log.Fatal(err) 
} 

計劃是交叉編譯在Mac上的窗口。

Sql文件最初是通過vim在Mac上寫入,然後上傳到服務器。

編輯:我建議調試後包括方法的代碼。

func (r *Icar) ReadAppointments(qCfg dms.QueryConfig) []dms.Appointment { 
    // r.conn contains the db connection 

    /*DEBUGGING*/ 
    name := "appointment.sql" 
    fmt.Printf("%q\n", name) 
    path, err := filepath.Abs(name) 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("%q\n", path) //correct path 

    file, err := ioutil.ReadFile("appointment.sql") 
    if err != nil { 
     log.Fatal(err) 
    } 

    fmt.Printf("%q\n", file) //correct output 
    /*END*/ 

    appointmentQuery := string(file) 

    fmt.Println(appointmentQuery) //correct output 

    appointmentQuery = strings.Replace(appointmentQuery, "@", qCfg.QueryLocationID, -1) 

    fmt.Println(appointmentQuery) //correct output 

    rows, err := r.conn.Query(appointmentQuery) 
    if err != nil { 
     fmt.Println(appointmentQuery) //wrong output. output contains edits from a previous version 
     log.Fatal("Error reading from the database: %s", err.Error()) 
    } 

    appointments := []dms.Appointment{} 

    var (
     ExternalID, 
     WONumber, 
     CustomerWaiting interface{} 
    ) 

    for rows.Next() { 
     appointment := dms.Appointment{} 

     err = rows.Scan(&ExternalID, &WONumber, &appointment.AppointmentDate, &CustomerWaiting) 
     if err != nil { 
      fmt.Println(appointmentQuery) 
      log.Fatal(err) 
     } 

     toStr := []interface{}{ExternalID, WONumber} 
     toInt := []interface{}{CustomerWaiting} 

     convertedString := d.ConvertToStr(toStr) 
     convertedInt := d.ConvertToInt(toInt) 

     appointment.ExternalID = convertedString[0] 
     appointment.WONumber = convertedString[1] 
     appointment.CustomerWaiting = convertedInt[0] 

     appointments = append(appointments, appointment) 
    } 

    err = rows.Close() 

    return appointments 
} 

我在我的主要功能中關閉延遲語句中的db連接。

下面是引用構造

func New(config QueryConfig) (*Icar, func()) { 

    db, err := sql.Open("odbc", config.Connection) 
    if err != nil { 
     log.Fatal("The database doesn't open correctly:\n", err.Error()) 
    } 

    icar := &Icar{ 
     conn: db, 
    } 

    return icar, func() { 
     icar.conn.Close() 
    } 
} 

回答

0

基本調試說,檢查您的輸入和輸出。您可能正在查看不同的文件。顯然,「appointment.sql」在文件系統中並不一定是唯一的。例如,這是否會給你預期的結果?

package main 

import (
    "fmt" 
    "io/ioutil" 
    "log" 
    "path/filepath" 
) 

func main() { 
    name := "appointment.sql" 
    fmt.Printf("%q\n", name) 
    path, err := filepath.Abs(name) 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("%q\n", path) 
    file, err := ioutil.ReadFile(name) 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("%q\n", file) 
} 

輸出:

"appointment.sql" 
"C:\\Users\\peter\\gopath\\src\\so\\appointment.sql" 
"SELECT * FROM appointments;\n" 
+0

感謝您的調試尖端。輸出是我所期望的,現在我更加困惑。我用一些代碼編輯了我的帖子。如果你能夠解決眼前的問題,將很感激。 – user3017869

相關問題