SQL-запрос AS400 с параметром - PullRequest
2 голосов
/ 29 января 2009

Я тестирую простой запрос для получения данных из базы данных 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 ]

4 голосов
/ 30 января 2009

Хорошо, я нашел решение, играя и пробуя разные вещи.

Как я уже говорил, я привык к 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.

2 голосов
/ 05 февраля 2009

Если вы собираетесь подключиться к 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();
}
1 голос
/ 29 января 2009

Picflight,

Возможно, вы подключились, используя соглашения об именах системы вместо соглашений об именах SQL . Измените Mylibrary.Mytable (квалификатор периода SQL) на Mylibrary / Mytable (классификатор косой черты).

...