带参数的AS400 SQL查询

时间:2009-01-29 19:52:37

标签: sql ibm-midrange

我正在测试一个简单的查询来从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 个答案:

答案 0 :(得分: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语句中添加问号(?)。

答案 1 :(得分:2)

如果您要使用.NET连接到AS400,首先应该使用IBM的IBM.Data.DB2.iSeries .NET提供程序。根据IBM的documentation,这是调用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();
}

答案 2 :(得分:1)

Picflight,

您可能已使用system naming conventions instead of SQL naming conventions进行了连接。将Mylibrary.Mytable(SQL句点限定符)更改为Mylibrary / Mytable(系统斜杠限定符)。