AS400 consulta SQL con parámetro

Estoy probando una consulta simple para get datos de una database AS400. No estoy seguro de si la forma en que estoy usando la consulta SQL es correcta.

Aparece un error: "El parámetro es incorrecto".

Select FIELD1, FIELD2 From Mylibrary.MyTable WHERE FIELD1 = @Field1 

No obtengo un error cuando ejecuto la siguiente consulta:

 Select FIELD1, FIELD2 From Mylibrary.MyTable WHERE FIELD1 = 'myvalue' 

Estoy usando ADODB, VBScript para probar.

 Set Param1 = cmd.CreateParameter("@Field1", 129, 1, 9, "myvalue") ' 129 String cmd.Parameters.Append Param1 

Vengo del entorno MS Sql, por lo que escribir para AS400 es totalmente nuevo para mí.
Gracias

Ok, obtuve la solución jugando e intentando cosas diferentes.

Como dije antes, estoy acostumbrado a OLEDB y ADO.Net, así que estoy acostumbrado a hacer cosas como:

 Select FIELD1, FIELD2 From Mylibrary.MyTable WHERE FIELD1 = @Field1 

que funcionan en Access y SQL Server pero no en AS / 400.

Tengo lo siguiente para trabajar:

 Select FIELD1, FIELD2 From Mylibrary.MyTable WHERE FIELD1 = ? cmd.ActiveConnection = connstr cmd.CommandType = 1'4 'Stonetworking Procedures '1 Text cmd.CommandText = sql Set Param1 = cmd.CreateParameter("@Field1", 129, 1, 9, "myvalue") ' 129 String cmd.Parameters.Append Param1 Set rs = cmd.Execute() 

Esto es todo VbScript. El truco fue agregar el signo de interrogación (?) En la statement SQL.

Si va a conectarse al AS400 usando .NET, antes que nada debe usar el proveedor IBM.Data.DB2.iSeries .NET de IBM. Según la documentation de IBM, este es el método preferido para llamar a sql:

 iDB2Connection conn = new IDB2Connnection(connectionstring); iDB2Command cmd = null; try { conn.Open(); string sql = "select * from somelibrary.sometable where a = @A and b = @B"; cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.DeriveParameters(); //this will talk to the AS400 to determine the param types cmd.Parameters["@A"].Value = Avalue; cmd.Parameters["@B"].Value = Bvalue; //execute the query cmd.ExecuteScalar(); //doesn't have to be Scalar but you get the idea } catch (Exception ex) { //handle your exceptions } finally { cmd.Dispose(); conn.Close(); } 

Picflight,

Es posible que se haya conectado usando las convenciones de nombres de sistema en lugar de las convenciones de nombres de SQL . Cambie Mylibrary.Mytable (calificador de período de SQL) a Mylibrary / Mytable (calificador de barra de sistema).