2014-02-05 64 views
0

我具有低於其給出MySQL錯誤1064插入在讀取數據

貼切的程序是5個字節的varchar,量是雙,paytype如SMALLINT(可以是用於瞬間1或2),作爲paydate日期,解釋是表中定義的50字節varchar

我調試4字節字符串數據的時候觀察到的值爲apt,金額爲40,paytype爲1,日期爲01-02-2014,解釋約爲20字節串。

爲什麼它給出錯誤1064.

因爲我正在讀數據?

正如你所看到的,我使用2個不同的conn連接,我讀取數據和conn1插入。

private void CreateGlobalDebt() 
    { 
     MySqlConnection conn = new MySqlConnection(Pvar.cs); 
     MySqlConnection conn1 = new MySqlConnection(Pvar.cs); 
     conn.Open(); 
     conn1.Open(); 
     MySqlCommand cmd = new MySqlCommand("SELECT apt FROM building ORDER BY apt", conn); 
     MySqlDataReader reader = cmd.ExecuteReader(); 
     MySqlTransaction trans = conn1.BeginTransaction(); 
     while(reader.Read()) 
     { 
      string apt = reader["apt"].ToString(); 
      MySqlCommand cmd1 = new MySqlCommand("INSERT parameters (apt,amount,paytype,paydate,explanation) VALUES (@apt,@amount,@paytype,@paydate,@explanation",conn1); 
      cmd1.Parameters.Add("@apt", MySqlDbType.VarChar,5).Value = apt; 
      cmd1.Parameters.Add("@amount", MySqlDbType.Double).Value = Convert.ToDouble(_textBox[0].Text); 
      cmd1.Parameters.Add("@paytype", MySqlDbType.Int16).Value = PayType; 
      cmd1.Parameters.Add("@paydate", MySqlDbType.Date).Value = Convert.ToDateTime(_textBox[2].Text); 
      cmd1.Parameters.Add("@explanation", MySqlDbType.VarChar, 50).Value = _textBox[3].Text.ToString(); 
      try 
      { 
       cmd1.ExecuteNonQuery(); 
      } 
      catch (MySqlException e) 
      { 
       trans.Rollback(); 
       conn.Close(); 
       conn1.Close(); 
       MessageBox.Show(e.Number.ToString() + " -> " + e.Message.ToString()); 
       return; 
      } 
      cmd1.Parameters.Clear(); 
     } 
     trans.Commit(); 
     conn.Close(); 
     conn1.Close(); 
    } 

回答

3

錯誤1064:

#1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用 手動...

命令:

INSERT parameters (apt,amount,paytype,paydate,explanation) VALUES (@apt,@amount,@paytype,@paydate,@explanation 

...缺少INTO關鍵字(which is standard,但有些數據庫讓你忽略它),結束)

你想:

MySqlCommand cmd1 = new MySqlCommand("INSERT INTO parameters (apt,amount,paytype,paydate,explanation) VALUES (@apt,@amount,@paytype,@paydate,@explanation)",conn1); 
+0

NOT INTO,但在最後謝謝:))))) 因爲almmost所有我的INSERT都沒有INTO,但它的工作除了這裏有一個parathesis少:) –

+0

很高興你得到它的工作!我建議使用'INSERT INTO',因爲[它更標準](http://stackoverflow.com/questions/233919/insert-vs-insert-into) –