SQL-запрос AS400 с параметром
Я тестирую простой запрос для получения данных из базы данных AS400. Я не уверен, правильно ли я использую SQL-запрос.
Я получаю сообщение об ошибке: "Неверный параметр".
Select FIELD1, FIELD2 From Mylibrary.MyTable WHERE FIELD1 = @Field1
Я не получаю сообщение об ошибке при выполнении следующего запроса:
Select FIELD1, FIELD2 From Mylibrary.MyTable WHERE FIELD1 = 'myvalue'
Я использую ADODB, VBScript для тестирования.
Set Param1 = cmd.CreateParameter("@Field1", 129, 1, 9, "myvalue") ' 129 String
cmd.Parameters.Append Param1
Я из среды MS Sql, так что написание для AS400 совершенно новое для меня.
Спасибо
3 ответа
Хорошо, я нашел решение, играя и пробуя разные вещи.
Как я уже говорил, я привык к OLEDB и ADO.Net, поэтому я привык делать такие вещи, как:
Select FIELD1, FIELD2 From Mylibrary.MyTable WHERE FIELD1 = @Field1
которые работают в Access и SQL Server, но не в AS/400.
Я получил следующее на работу:
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()
Это все VbScript. Хитрость заключалась в том, чтобы добавить знак вопроса (?) В оператор SQL.
Если вы собираетесь подключаться к AS400 с помощью.NET, прежде всего вам следует использовать поставщика IBM.Data.DB2.iSeries.NET от IBM. Согласно документации IBM, это предпочтительный метод для вызова 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,
Возможно, вы подключились, используя соглашения об именах системы вместо соглашений об именах SQL. Измените Mylibrary.Mytable (квалификатор периода SQL) на Mylibrary/Mytable (классификатор косой черты).