generador - AS400 consulta SQL con parámetro
sql en arcgis (3)
Estoy probando una consulta simple para obtener datos de una base de datos 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
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).
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 documentación 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();
}
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 ''Stored 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 declaración SQL.