『20分』C#连接Access数据

vitachuh 2009-03-03 06:02:16
做了个C\S的程序,用到了Access数据库。偶尔会在open()时出现下述异常,寻求解决方法。

System.Data.OleDb.OleDbException
未指定的错误

因为是偶尔触发该异常,所以确定代码是没有问题。不知道是什么原因导致的,谢谢。

补充一点,注意了一下资源消耗,触发该异常时,一般都是内存100%左右时;正常情况下内存没这么高。
...全文
3375 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
hh410 2009-09-20
  • 打赏
  • 举报
回复
刚刚用了一个简单的页面,还是一样。在VS自带的服务器中正常,到了IIS里就不正常了。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;

namespace Fly.ESTown.Web
{
public partial class WebForm1 : System.Web.UI.Page
{
public static string connectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" +
System.Web.HttpContext.Current.Server.MapPath("~/App_Data/enstom.mdb");
protected void Page_Load(object sender, EventArgs e)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
try
{
connection.Open();
string strLableText = "DataSource: " + connection.DataSource + "</br>Provider:" + connection.Provider;
this.Label1.Text = strLableText;
}
catch (Exception ex)
{
this.Label1.Text = ex.Message + ex.Source + ex.InnerException + ex.StackTrace + ex.TargetSite;
}
// The connection is automatically closed when the
// code exits the using block.
}

}
}
}

vitachuh 2009-03-11
  • 打赏
  • 举报
回复
郁闷,就是问了几天问题嘛,什么都没做,再运行程序,怎么不出错了。。。到底怎么回事。。。唉。。。
liumj2001 2009-03-05
  • 打赏
  • 举报
回复
不会是内存的问题,内存不足程序会不响应。

看看是不是资源没有释放,当出现这个文题时,你常试一下修改ACCESS的文件名看看是否能修改,如果不能那一定是有什么东西占用了。
vitachuh 2009-03-05
  • 打赏
  • 举报
回复
请注意,是在Open时异常的,不是在执行查询时。

我发誓不是代码的原因,我估计是内存占用率较高而导致的。
现在困惑的是,当内存占用较高时是不是肯定是触发该异常的原因?有没有什么办法能解决内存占用较高而运行成功的办法?


谢谢
vitachuh 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yinjianjing 的回复:]
parameters[0] = new OleDbParameter("@server_id", OleDbType.VarChar);
parameters[0].Value = serverId;


中, serverId有没有可能会出现整型的时候,不知道我这思路会不会又让你崩溃,我查错都是这样查的
[/Quote]

已经崩溃。。。绝对不可能,我拿性命担保~
yinjianjing 2009-03-05
  • 打赏
  • 举报
回复
parameters[0] = new OleDbParameter("@server_id", OleDbType.VarChar);
parameters[0].Value = serverId;


中, serverId有没有可能会出现整型的时候,不知道我这思路会不会又让你崩溃,我查错都是这样查的
vitachuh 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yinjianjing 的回复:]
你贴的代码肯定是没有问题的,那有没有可能你的SQL语句引发的异常呢
[/Quote]


...
string sql = "SELECT log_level, log_time, log_content, log_type, module_name, camera_id, user_name FROM log WHERE server_id=?";

OleDbParameter[] parameters = new OleDbParameter[1];

parameters[0] = new OleDbParameter("@server_id", OleDbType.VarChar);
parameters[0].Value = serverId;
...


为什么没人相信我呢?都说了出错不是必然,是有条件的出错,请从现象帮我分析分析吧,拜托了。
yinjianjing 2009-03-05
  • 打赏
  • 举报
回复
你贴的代码肯定是没有问题的,那有没有可能你的SQL语句引发的异常呢
relive_qiankai 2009-03-05
  • 打赏
  • 举报
回复
关注!
vitachuh 2009-03-05
  • 打赏
  • 举报
回复
不要沉,再顶一下~
liumj2001 2009-03-05
  • 打赏
  • 举报
回复
你修复一下数据库试试看。?
douyitong 2009-03-05
  • 打赏
  • 举报
回复
我也顶一个
vitachuh 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liumj2001 的回复:]
不会是内存的问题,内存不足程序会不响应。

看看是不是资源没有释放,当出现这个文题时,你常试一下修改ACCESS的文件名看看是否能修改,如果不能那一定是有什么东西占用了。
[/Quote]

异常提示为:System.Data.OleDb.OleDbException未知错误

不是,根本就没有任何程序访问该文件,改名字也能改。

刚刚加了个2G的内存,也出现了这个异常,当时内存占用率可能有50%。郁闷。。。怎么回事呢?

是不是Access数据库文件的原因?但是也有操作成功的时候呀。。。

晕晕晕晕晕晕晕晕晕晕晕晕晕晕晕晕晕~~~~~
vitachuh 2009-03-04
  • 打赏
  • 举报
回复
自己顶一个,继续关注~
vitachuh 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tjw687492 的回复:]
贴你的代码
[/Quote]


string appPath = Application.StartupPath + "\\";

...

private static string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + appPath + "DB\\log.mdb";

...

public static DataSet ExecuteQuery(string sql, OleDbParameter[] parameters)
{
Console.WriteLine(sql);
Console.WriteLine(connString);

using (OleDbConnection connection = new OleDbConnection(connString))
{
DataSet ds = new DataSet();
try
{
connection.Open();// <-这里出现异常

OleDbDataAdapter da = new OleDbDataAdapter(sql, connection);

if (parameters != null)
da.SelectCommand.Parameters.AddRange(parameters);

da.Fill(ds, "ds");

return ds;
}
catch (Exception)
{
return null;
}
finally
{
connection.Close();
}
}
}


以上是代码片段。

说明几点:

1.不是每次都出现异常,也正常运行过,出现异常的条件见主题描述,应该可以排除代码的问题吧;
2.路径没问题,打印确定过;
3.也不是某一个方法没有Close,因为当内存占用较多时,直接执行该操作即报异常。

谢谢大家的回复,继续关注~~~
vitachuh 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xinke_li 的回复:]
是不是在打开Access数据库的同时又在C#中open了?
[/Quote]

没有。
aisini_an 2009-03-04
  • 打赏
  • 举报
回复
学习.
yuqicook19880808 2009-03-04
  • 打赏
  • 举报
回复
是不是某一个方法没有close()

tjw687492 2009-03-04
  • 打赏
  • 举报
回复
贴你的代码
xinke_li 2009-03-04
  • 打赏
  • 举报
回复
是不是在打开Access数据库的同时又在C#中open了?
加载更多回复(3)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧