2012-02-17 101 views
1

下面的代码似乎没有将参数值插入到查询中(查询没有返回任何内容)。如果我测试的DB该查询(当然代替?笔者参数I型传入的值和一些返回行。为什么呢?MySqlCommand似乎没有传递参数

var conn = new MySqlConnection(connectionString); 

    MySqlCommand comm = new MySqlCommand("", conn); 

    comm.Parameters.Add(new MySqlParameter("?author", author)); //I've also tried AddWithValue method 

    comm.CommandText = .....; 

      conn.Open(); 
      MySqlDataReader myReader = comm.ExecuteReader(); 

      try 
      { 
       while (myReader.Read()) 
       { 
        //unreachable code because nothing is returned 
       } 
      } 
      catch 
      { 
       myReader.Close(); 
       conn.Close(); 
       categoriesList.Clear(); 
      } 
      finally 
      { 
       myReader.Close(); 
       conn.Close(); 
      } 

回答

1

由于您使用MySQLCommand不要在参数的名称添加?

,如果你有这样的查询:

comm.CommandText = "INSERT INTO tableName(colA) VALUES (@param1)"; 
comm.CommandType = CommandType.Text; 

,那么你必须这样做的:

comm.Parameters.AddWithValue("param1", "yourValue"); 

UPDATE

假设你有查询与LIKE条件:

"SELECT * FROM WHERE colA Like '%value%'" 

那就试试这个:

comm.CommandText = "SELECT * FROM WHERE colA Like CONCAT('%', @param1, '%'"); 
comm.Parameters.AddWithValue("param1", "yourValue"); 
+0

sql snippet:'AND b.AuthorNames LIKE'%@ author%'''然后'comm.Parameters.AddWithValue(“author”,author);'仍然没什么 – user1215114 2012-02-17 02:41:15

+0

@ user1215114您应该使用'CONCAT'函数。我的答案现在已更新。 – 2012-02-17 02:49:37

+0

CONCAT功能解决了这个问题。谢谢 ! – user1215114 2012-02-17 02:55:22

0

为.CommandText需要将之前这可能是一样简单在.Parameters.Add语句所以:

comm.CommandText = .....; 
    comm.Parameters.Add(new MySqlParameter("?author", author)); //I've also tried AddWithValue method