English 中文(简体)
AS400 SQL查询带参数
原标题:
  • 时间:2009-01-29 19:52:37
  •  标签:

我正在测试一个简单的查询,以从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

I am coming from MS Sql environment, so writing for AS400 is totally new for me.
Thanks

最佳回答

好的,我通过尝试不同的方法玩弄解决方案。

正如我之前所说,我习惯于使用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的.NET提供程序IBM.Data.DB2.iSeries。根据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(系统斜杠限定符)。





相关问题
热门标签