2011-04-02 23 views
14

simplemente desea ejecutar la siguiente declaración Mysql¿Cómo puedo usar una variable definida por el usuario MySql en .NET MySqlCommand?

SET @a = 1;SELECT @a; 

con MySql.Data.MySqlClient

[System.Reflection.Assembly]::LoadWithPartialName("MySql.Data") 

$password = 'mypassword' 

$sql = "SET @a = 1;SELECT @a;" 

$server = 'localhost' 
$port = 3306 
$database = 'test' 
$User = 'root' 


$conn=new-object MySql.Data.MySqlClient.MySqlConnection 
$connectionstring = "Server=$Server;Port=$port;Database=$DataBase;Uid=$User;Pwd=$Password;allow zero datetime=yes" 
$conn.ConnectionString = $connectionstring 
$conn.Open() 

$cmd=new-object MySql.Data.MySqlClient.MySqlCommand($sql,$conn) 
$ds=New-Object system.Data.DataSet 
$da=New-Object MySql.Data.MySqlClient.MySqlDataAdapter($cmd) 
$da.fill($ds) 
$conn.close() 
$ds.tables[0] 

consigo un error fatal.

Si se sustituyen $ sql por cualquiera

$sql = "SELECT DATABASE();" 

o

$sql = "SELECT 1;" 

consigo el resultado esperado.

Encontré este question, pero no resuelve mi problema.

Estoy tratando de portar SQLIse (una parte de SQLPSX project) a la versión MySQL MySQLIse.

Deseo procesar cualquier declaración simple y válida de mysql.

EDIT:

yo estaba tratando de ejecutar partes del sakila-schema.sql la base de datos de demostración MySQL script de instalación que se extiende por algo así como

mysql> FUENTE C:/temp/Sakila-db /sakila-schema.sql;

+0

hace "SET @a = 1; SELECT @a;" trabajar en la herramienta MySql estándar? En TSQL necesita declarar la variable antes de usarla, "DECLARAR @a int; SET @ a = 1; SELECCIONAR @a;" –

+0

sakila-schema.sql comienza con: SET @OLD_UNIQUE_CHECKS = @@ UNIQUE_CHECKS, UNIQUE_CHECKS = 0; –

Respuesta

39

he encontrado la solución en este bolg

tengo que añadir

;Allow User Variables=True 

a la cadena de conexión

$connectionstring = "Server=$Server;Port=$port;Database=$DataBase;Uid=$User;Pwd=$Password;allow zero datetime=yes;Allow User Variables=True" 

obras. Lo probé con la versión 6.3.6.0. de MySql.Data.

+3

+1000 para esto. – ThisBoyPerforms

Cuestiones relacionadas