【发布时间】:2016-01-17 11:40:35
【问题描述】:
我正在尝试从我的代码运行存储过程,但出现以下错误:
附加信息:错误 [42S02] [IBM][System i Access ODBC 驱动程序][DB2 for i5/OS]
SQL0204 - MyLibrary 类型 *FILE 中的 StoredProc1 未找到。
我的代码:
internal DataTable Retrieve()
{
var sql = string.Format("Select * from StoredProc1");
DataSet dataset = new DataSet();
OdbcCommand command = new OdbcCommand(sql);
// MyConnectionString = "ODBC;DATABASE=MyLibrary;DSN=AS400-MyLibrary;UID=MyUser;PWD=MyPwd;ALLOWUNSCHAR=0;"
// It works fine for sure since I can change the StoredProc1 to a table instead and the query works fine. So it is not a connection problem.
command.Connection = _libraryConnection.Connection;
command.CommandType = CommandType.StoredProcedure;
OdbcDataAdapter adapter = new OdbcDataAdapter(command);
lock (_anyObj)
{
_libraryConnection.OpenConnection();
adapter.Fill(dataset);
_libraryConnection.CloseConnection();
}
return dataset.Tables[0];
}
AS400 存储过程 SQL:
BEGIN
DECLARE C2 CURSOR WITH RETURN FOR
SELECT * FROM MyLibrary.TABLE1;
OPEN C2 ;
END
存储过程的 AS400 选项:
Max number of result sets: 0
Data access: Read SQL Data
Concurrent access resolution: Default
Transaction control: Do not commit on return
Unified debugger mode: Disallow debug mode
AS400 第 7 版第 1 版
编辑: 我将 sql 变量更改如下:
var sql = "{CALL StoredProc1()}";
现在它没有抛出异常,但另一方面我没有在数据表中得到任何行。查询到的表肯定有记录。
【问题讨论】:
-
查找您的连接字符串。文件名错误。您没有发布连接字符串所在的代码。
-
检查存储过程是否调用了文件。
-
我不清楚,你能解释一下吗?
-
您在问题中显示
AS400 options for the stored procedure。那是从哪里来的?您是否使用 Data Studio 或其他客户端来查看这些选项?第一个选项是Max number of result sets: 0。所以似乎没有定义result set。您能显示 CREATE PROCEDURE 语句中的创建属性吗?
标签: c# database stored-procedures db2 ibm-midrange