2014-09-19 71 views
1

我正在創建一個程序,可以插入音頻到mysql數據庫(我使用mediumblob數據類型),但當我點擊插入按鈕時,它顯示錯誤「列數據不能爲空」。這裏是我的代碼:列數據不能爲空c#mysql

private void buttonBrowse_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog ofd = new OpenFileDialog(); 
     ofd.Filter = "WAV Audio Files|*.wav|M4A Audio Files|*.m4a"; 
     if (ofd.ShowDialog() == DialogResult.OK) 
     { 
      textBoxBrowse.Text = ofd.FileName; 
     } 
    } 

    private void buttonSimpan_Click(object sender, EventArgs e) 
    { 
     OdbcConnection con = new OdbcConnection(Program.konek); 
     OdbcCommand com = new OdbcCommand("insert into audio(data) values(@voice)", con); 
     byte[] stream = File.ReadAllBytes(@textBoxBrowse.Text); 
     MessageBox.Show(stream.ToString()); 
     if (stream.Length > 0) 
     { 
      com.Parameters.AddWithValue("@voice", stream); 
      con.Open(); 
      int result = com.ExecuteNonQuery(); 
      if (result > 0) 
       MessageBox.Show("insert done"); 
      con.Close(); 
     } 
    } 

有沒有人有這方面的解決方案?

+2

ODBC不支持命名參數。嘗試將'@ voice'更改爲'?' – 2014-09-19 12:02:53

+0

另外,爲什麼不使用MySQL數據提供程序? – 2014-09-19 12:04:21

+0

我使用的是odbc,因爲它支持在vs 2010中創建報告 – 2014-09-25 10:35:13

回答

0

從MSDN OdbcParameter Class

當CommandType設置爲文本,在.NET Framework數據提供ODBC不支持將命名參數的SQL語句或通過的OdbcCommand調用的存儲過程。無論哪種情況,請使用問號(?)佔位符。例如:

因此改變你的查詢

OdbcCommand com = new OdbcCommand("insert into audio(data) values(?)", con); 
byte[] stream = File.ReadAllBytes(@textBoxBrowse.Text); 
    MessageBox.Show(stream.ToString()); 
    if (stream.Length > 0) 
    { 
     com.Parameters.AddWithValue("voice", stream); 
     con.Open(); 
     int result = com.ExecuteNonQuery(); 
     if (result > 0) 
      MessageBox.Show("insert done"); 
     con.Close(); 
    } 
} 
相關問題