[英]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.