2

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 を書くことは私にとってまったく新しいことです。
ありがとう

4

3 に答える 3

4

わかりました、遊んでさまざまなことを試すことで解決策を得ました。

前に言ったように、私は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 ステートメントに疑問符 (?) を追加することでした。

于 2009-01-29T22:12:00.393 に答える
2

.NET を使用して AS400 に接続する場合は、まず、IBM のIBM.Data.DB2.iSeries .NET プロバイダーを使用する必要があります。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();
}
于 2009-02-04T22:18:21.283 に答える
1

ピフライト、

SQL の命名規則ではなく、システムの命名規則を使用して接続している可能性があります。Mylibrary.Mytable (SQL ピリオド修飾子) を Mylibrary/Mytable (システム スラッシュ修飾子) に変更します。

于 2009-01-29T20:17:14.133 に答える