我有以下SQL查询,我希望通过两个变量获得结果。但是,我收到了语法错误,更具体地说:
near '+'pablo'+ '%' AND apellido LIKE '%' +'rodriguez'+ '%'' at line 1 at
MySql.Data.MySqlClient.MySqlStream.ReadPacket() at
MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32&
insertedId) at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId,
Int32&affectedRows, Int32& insertedId) at
MySql.Data.MySqlClient.Driver.NextResult(Int32
statementId, Boolean force) at
MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at
MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() at
ProyectoProgra4Nota3.modelos.Usuario.buscarQuery(String search, String search2)
这是我的疑问:
MySqlCommand comando = new MySqlCommand();
comando.Connection = con.usaConexion();
comando.CommandText = "SELECT * FROM usuarios WHERE nombre LIKE '%' +@search+ '%' AND apellido LIKE '%' +@search2+ '%' ";
comando.Parameters.AddWithValue("@search", search);
comando.Parameters.AddWithValue("@search2", search2);
MySqlDataReader reader = comando.ExecuteReader();
while (reader.Read())
{
Usuario u2 = new Usuario();
u2.Correo = reader["correo"].ToString();
u2.Nombre = reader["nombre"].ToString();
u2.Apellido = reader["apellido"].ToString();
u2.Clave = reader["clave"].ToString();
lista.Add(u2);
}
答案 0 :(得分:2)
尝试以下操作,它将通配符直接添加到参数而不是查询本身。如果您可以发布英文堆栈跟踪/错误消息,那将非常有用。
using(MySqlCommand comando = new MySqlCommand())
{
comando.Connection = con.usaConexion();
comando.CommandText = "SELECT * FROM usuarios WHERE nombre LIKE @search AND apellido LIKE @search2";
comando.Parameters.AddWithValue("@search", "%"+search+"%");
comando.Parameters.AddWithValue("@search2", "%"+search2+"%");
using(MySqlDataReader reader = comando.ExecuteReader())
{
// rest of code
}
}
您还应将实例包装在using
块中实现IDisposable的类型中。这确保即使在发生异常时也可以清理资源。对于连接对象尤其如此,在您的情况下名为con
。
答案 1 :(得分:0)
首先,您不应该像这样调用查询。您必须创建一个存储过程并从c#代码调用该存储过程。
您的查询应该是:
SELECT * FROM usuarios WHERE nombre LIKE LIKE '%@search%' and AND apellido LIKE '%@search2%'
注意:您应该使用您的连接和读者对象。或者你可以在finally
块中关闭和处理连接。
为命令添加参数可以比你写的更好。
command.Parameters.Add("@someParam", SqlDbType.Int);
command.Parameters["@someparam"].Value = someParamValue;
在这里,您要告诉参数的数据类型,因此可以避免运行时错误。
答案 2 :(得分:-1)
试试这个:
comando.CommandText = "SELECT * FROM usuarios
WHERE nombre LIKE '%' " +@search+ '%'
AND apellido LIKE '%' +@search2+ '%' ";