网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
10月18日漏签0天
c#吧 关注:188,595贴子:823,469
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 7回复贴,共1页
<<返回c#吧
>0< 加载中...

求助这个oracle的adapter.fill到底是什么情况

  • 只看楼主
  • 收藏

  • 回复
  • 一把锹挖遍世界
  • c#小菜鸟
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我使用的是unity开发的,引用的Oracle.ManagedDataAccess.dll,在正常的编辑器界面怎么执行都没事,但是一旦打包发布出来执行查询类语句就报错,虽然也能查出结果来,但是很难受,报错如下:
System.InvalidOperationException: 对已关闭对象的操作无效
at Oracle.ManagedDataAccess.Client.OracleDataReader.get_SchemaTables () [0x00018] in <9bc12affb845411fa19eff17a384ba24>:0
at (wrapper remoting-invoke-with-check) Oracle.ManagedDataAccess.Client.OracleDataReader:get_SchemaTables ()
at Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill (System.Data.DataTable dataTable, System.Data.IDataReader dataReader) [0x00069] in <9bc12affb845411fa19eff17a384ba24>:0
at Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill (System.Data.DataTable dataTable, System.Data.IDbCommand command, System.Data.CommandBehavior behavior) [0x00123] in <9bc12affb845411fa19eff17a384ba24>:0
at System.Data.Common.DbDataAdapter.Fill (System.Data.DataTable dataTable) [0x00019] in <cd1c5a12fe914342bd91501d6488959f>:0
at (wrapper remoting-invoke-with-check) System.Data.Common.DbDataAdapter:Fill (System.Data.DataTable)
at OracleHelper.SelectDataSet (System.String sql, System.String serverID, System.String nullstr) [0x0008b] in <017d81c61d0449d58102783a5bfca73f>:0
,主要就在于
cmd.CommandText = sql;
OracleDataAdapter oda = new OracleDataAdapter(cmd);
oda.Fill(das);
中的fill这一步,


  • 蛋蛋
  • c#砖家
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
目测con没open


2025-10-18 17:27:55
广告
不感兴趣
开通SVIP免广告
  • 一把锹挖遍世界
  • c#小菜鸟
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我是写了一个静态方法,通过服务器id以及sql进行静态调用,在编辑器模式下没问题,一打包发布就报错
using Oracle.ManagedDataAccess.Client;
public static DataSet SelectDataSet(string sql, string serverID)
{
DataSet das = new DataSet();
OracleConnection currentconn = null;
//LogHelper.Instance.Print("当前触发查询语句为:"+sql);
//MonoBehaviour.print("当前触发查询语句为:" + sql);
//LogToFileHelper.Info("Oracle/", "Oracle", "当前触发查询语句为:"+sql);
try
{
//ConfigHelper.GetOracleConnection(serverID) 即通过配置文件类静态获取连接串
using ( currentconn = new OracleConnection(ConfigHelper.GetOracleConnection(serverID)))
{
currentconn.Open();
LogToFileHelper.Info("Oracle/", "Oracle", "当前数据库连接状态:" + currentconn.State.ToString());
OracleCommand cmd = new OracleCommand(sql, currentconn);
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
//OracleDataAdapter command = new OracleDataAdapter(sql, currentconn);
adapter.Fill(das);
}
}
catch (Exception e)
{
LogHelper.Instance.Print("查询或连接服务器错误:"+e.ToString().Substring(0,300));
//LogToFileHelper.Info("Oracle/", "Oracle", "当前触发查询语句为:" + sql);
//LogToFileHelper.Info("Oracle/", "Oracle", "查询或连接服务器错误:" + e.ToString().Substring(0, 300));
}
finally
{
currentconn.Close();
}
return das;
}


  • 蛋蛋
  • c#砖家
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这问题吧,挺有意思的
using ( currentconn = new OracleConnection(ConfigHelper.GetOracleConnection(serverID))){}
你用了using操作connection,照理说出了using之后,连接就自动关掉了
所以,在你的finally里面去currentconn.Close(); 的时候,已关闭的连接,不能再关一次,就报错了。
在currentconn.Close(); 之前,你得判断一下currentconn.State 是打开的或者不是关闭的 ,这应该是个枚举型; 甚至说要判断currentconn != null


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回c#吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示