gpt4 book ai didi

c# - 将我的 DataGridView 绑定(bind)到引用游标

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:34 25 4
gpt4 key购买 nike

我一直在尝试将我的 DataGridView 连接到作为引用游标的存储过程的输出。我搜索了很多网站和博客,都无法解决我遇到的问题。这是我用于在 Oracle 11g 中创建过程的代码:

    Create or replace package testpkg 
as
type T_cursor is ref cursor;
procedure cursor1 (IDp in number, records out T_cursor);
end testpkg;
/

create or replace package body testpkg as
procedure cursor1 (IDp in number, records out T_cursor)
is
temp_records T_Cursor;
begin
open temp_records for
select status,at_time
from shift_records
where employee_id=IDp;
records:=temp_records;
end cursor1;
end testpkg;
/

这是我在c#中使用的代码,我正在为应用程序设计一个窗口,EmpSal是DataGridView名称:

DataSet ds = new DataSet();
OracleConnection con = new OracleConnection(connString);
OracleCommand cmd = new OracleCommand();

cmd.CommandText = "testpkg.cursor1";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("IDp", OracleDbType.Int16);
cmd.Parameters["IDp"].Direction = ParameterDirection.Input;
cmd.Parameters["IDp"].Value = ID;

cmd.Parameters.Add("records", OracleDbType.RefCursor);
cmd.Parameters["records"].Direction = ParameterDirection.Output;


OracleDataAdapter da = new OracleDataAdapter(cmd);


DataTable dt = new DataTable();
dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
da.Fill(dt);

BindingSource bindingSource1 = new BindingSource();
bindingSource1.DataSource = dt;


EmpSal.DataSource = bindingSource1;

我知道这个C#可能看起来不是很合逻辑,因为我从很多博客里拿过来,修改了很多。但仍然出现此错误:

InvalidOperationException was unhandled
Operation is not valid due to the current state of the object.

此错误位于:“da.Fill(dt);”

感谢任何帮助。

最佳答案

看起来您没有打开连接对象。 (**在旁注中,OracleConnection 是一个已弃用的类。)

此链接应该为您提供一个很好的示例(适用于 .Net Framework 4.5)

http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleconnection(v=vs.110).aspx

你应该得到一些接近的东西:

using (OracleConnection connection = new OracleConnection(connString))
{
DataTable dt = new DataTable();
OracleCommand cmd = new OracleCommand();
cmd.CommandText = "testpkg.cursor1";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("IDp", OracleDbType.Int16);
cmd.Parameters["IDp"].Direction = ParameterDirection.Input;
cmd.Parameters["IDp"].Value = ID;

cmd.Parameters.Add("records", OracleDbType.RefCursor);
cmd.Parameters["records"].Direction = ParameterDirection.Output;
cmd.Connection = connection;

try
{
connection.Open();
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

关于c# - 将我的 DataGridView 绑定(bind)到引用游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25527400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com