2009-01-29 107 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(); 
}