请问Windows服务何如操作Access数据库??急。。。
公司项目需求 要做一个监听服务,做了一个windows服务,之前用SQL SERVER测试代码正确运行, 现在数据库换成Access,就改了数据库连接字符串,服务运行就报错,数据库连接字符串如下:
在web中正确运行,服务就报错
public abstract class DbHelperOleDb
{
public static string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("/MarketingTemplate.mdb");
public DbHelperOleDb()
{
}
....
}
错误记录
2013-11-23 12:07:14 授权许可监听程序服务启动
2013-11-23 12:07:14 “HubeiQiwang.DBUtility.DbHelperOleDb”的类型初始值设定项引发异常。
项目结构
HubeiQiwang.MarketingTemplate 为WEB项目
HubeiQiwang.AuthorizeKeyService 为服务
只有21分了,各位大大帮帮忙~~
------解决方案-------------------- 如果你觉得这类“类型初始值设定项引发异常”非常恶心(我一直觉得vs调试环境中最大的瑕疵就在于这个,看来只有等微软把vs版本升级到30版才能解决这个调试问题了),你完全可以把所有的内容都挪出类型初始化方法,而放到其它普通的方法里。
由于对象其它方法运行时对于对象初始化的需求、不过都是要获取之前设置的变量值,那么你可以把许多变量变为“延迟初始化”的。例如对于 DbConnetion,可以这样写
private DbConnection _conn;
private DbConnection Conn
{
get
{
if(_conn == null)
{
_conn = .........创建 connection 对象
}
return _conn;
}
}
而不需要在对象初始化方法中去创建 connection 对象。
这样做的目的是,vs调试器可以给出具体而正确的异常报告,并且支持你在vs调试器上即时调试程序,而不会报告一个垃圾地消息“类型初始值设定项引发异常”。
------解决方案-------------------- 许多时候,灵活改为使用更为正确的开发方法,要比你凑巧拼凑出暂时的一两个结果更重要。
引用: Windows服务怎么会调用HttpContext.Current.Server.MapPath呢。
是这样的。
如果vs正常调试器抛出异常,它一定会在 Current.Server 这里告诉你“未将对象应用为对象的实例”之类的明确的异常报告。而你的这种写法,vs的调试器就搞不定了。