2009-06-06 21 views
14

Estoy intentando ejecutar una consulta que actualmente funciona en phpMyAdmin pero no funciona al ejecutarlo en .NET utilizando MySqlAdapter. Esta es la declaración Sql.¿Es posible usar una variable definida por el usuario MySql en .NET MySqlCommand?

SELECT @rownum := @rownum +1 rownum, t . * 
FROM (
    SELECT @rownum :=0 
) r, (
    SELECT DISTINCT 
    TYPE FROM `node` 
    WHERE TYPE NOT IN ('ad', 'chatroom') 
)t  

Está utilizando @rownum para numerar cada fila distinta que se devuelve desde mi consulta escalar interna. Pero si lo uso en .NET, supongo que el @rownum es un parámetro y arrojo una excepción porque no lo definí.

using (var sqlConnection = new MySqlConnection(SOURCE_CONNECTION)) 
{ 
    sqlConnection.Open(); 

    MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(SqlStatement, sqlConnection); 

    DataTable table = new DataTable(); 
    sqlAdapter.Fill(table); 
    sqlConnection.Close(); 

    return table; 
} 

¿Alguna idea de cómo podría solucionar este problema? ¿O formas posibles de obtener un número de línea?

Respuesta

1

Se podría añadir una columna a la tabla llamada rownum, luego rellenarlo con valores:

table.Columns.Add("rownum"); 
for (int i=0; i < table.Rows.Count; i++) 
{ 
table.Rows[i]["rownum"] = i; 
} 
+0

Sería honesto que evitaría generar manualmente el número de esta manera, pero podría ver esto como una posible solución. Creo que realmente necesito replantearme la forma en que estoy sacando los datos. –

3

¿Qué versión del proveedor de datos MySQL está usando? Es posible que deba actualizar.

He encontrado esto en el 5.0 documentation:

Las versiones anteriores del proveedor utilizan el símbolo '@' para marcar parámetros en SQL. Esto es incompatible con las variables de usuario de MySQL, por lo que el proveedor ahora usa el '?' símbolo para ubicar parámetros en SQL. Para admitir código anterior, puede establecer 'old syntax = yes' en su cadena de conexión. Si hace esto, tenga en cuenta que no se lanzará una excepción si no define un parámetro que pretendía utilizar en su SQL.

+0

Gracias por la actualización. Lo vi en la documentación también. Es una versión bastante reciente, ya que se descargó hace solo un par de semanas. Probé la sintaxis anterior = sí sin ningún cambio en el comportamiento. –

+0

El enlace parece estar muerto ahora. – Bugs

Cuestiones relacionadas