3

我得到:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''spectra' WHERE specId=42' 附近使用正确的语法

运行此代码时:

public System.Drawing.Image GetImage(int index)
{
 using (MySqlCommand command = connection.CreateCommand())
 {
  //command.CommandText = "SELECT imageObj FROM spectra WHERE specId=42"; <== Works OK!

  command.CommandText = "SELECT imageObj FROM @tname WHERE specId=@index";
  command.Parameters.AddWithValue("@index", index);
  command.Parameters.AddWithValue("@tname", "spectra");

  using (MySqlDataReader reader = command.ExecuteReader())
  {
   if (reader.Read())
   {
    return (System.Drawing.Image)Serial.ByteArrayToObject((byte[])reader[0]);
   }
  }
 }
 return null;
}

我认为问题在于频谱周围的引号。我怎样才能删除它们?

4

1 回答 1

4

您不能用参数替换表名。可悲的是,这不受支持。只有 WHERE 子句中的参数值可以用这种方式替换。

您必须自己进行替换,而不是依赖MySqlCommand对象。像这样的东西应该工作:

string tableName = "spectra";
command.CommandText = 
    String.Format( "SELECT imageObj FROM {0} WHERE specId=@index", tableName );
command.Parameters.AddWithValue("@index", index);
于 2012-06-20T00:32:46.317 回答