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 (классификатор косой черты).

Другие вопросы по тегам