2009-01-29 51 views
1

我正在测试一个简单的查询以从AS400数据库获取数据。 我不确定我使用SQL查询的方式是否正确。带参数的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

好吧,我通过玩弄和尝试不同的东西得到了解决方案。

正如我以前说过,我习惯了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语句中添加问号(?)。

+0

噢!我忘记了自己... – 2009-01-30 02:28:18

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(); 
}