繁体   English   中英

带参数的AS400 SQL查询

[英]AS400 SQL query with Parameter

我正在测试一个简单的查询,以从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编写对我来说是全新的。
谢谢

好的,我通过反复试验和尝试不同的方法来获得解决方案。

如前所述,我习惯于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语句中添加问号(?)。

如果要使用.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();
}

Picflight,

您可能使用系统命名约定而不是SQL命名约定进行连接 将Mylibrary.Mytable(SQL期间限定符)更改为Mylibrary / Mytable(系统斜杠限定符)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM