UPDATE2 好吧,我能够让它工作,但我认为有一个问题 另外两个不同的数据管理器。搬出去之后 在它工作的方法中的外部。第一次更新的例外是因为我没有关闭阅读器,所以它打开了太多的表,JET在2048个开放表上崩溃了。所以,但我对结果不是很满意,但至少数据出来了。
我认为对于C#中的MDB目的而言,最好使用已经证明可以完成它的旧的ADODB COM Wrapper。
感谢你的所有评论。
更新 在我将其移动到方法之后,我现在得到了这个例外:
at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
at getMoney(String card, String field)Unspecified errorMicrosoft JET Database Engine
当我尝试在我的ASPX网页中使用代码背后:
try
{
while()
{
...
db.Open();
readDataMoney = new OleDbCommand("SELECT * FROM Customer WHERE card = '" + customer.card + "';", db).ExecuteReader();
while (readDataMoney.Read())
{
try
{
if (!readDataMoney.IsDBNull(readDataMoney.GetOrdinal("Credit")))
{
customer.credit = Convert.ToDouble(readDataMoney[readDataMoney.GetOrdinal("Credit")]);
}
if (!readDataMoney.IsDBNull(readDataMoney.GetOrdinal("Bonus")))
{
customer.bonus = Convert.ToDouble(readDataMoney[readDataMoney.GetOrdinal("Bonus")]);
}
}
catch (Exception ex)
{
//Connector.writeLog("Money: " + ex.StackTrace + "" + ex.Message + "" + ex.Source);
customer.credit = 0.0;
customer.credit = 0.0;
continue;
}
finally { }
}
readDataMoney.Close();
db.Close();
...
}
}
catch
{
continue;
}
如果从db读取的数据不起作用时出现问题,则整个页面会挂起。 我试图检查!isNull,但同样的问题。 我有很多不同的MDB文件要处理,这些只是readonly(无法修复/压缩) 还有一些或其他没有。相同的表格设计/布局。用旧的ASP Classic 3.0 所有这些都在处理“On Resume Next”。我知道我知道。但就是这样。 无法更改来源。所以基本问题是:
有没有办法告诉.NET继续循环,无论发生什么 如果有任何异常,请尝试循环?
经过大量的工作后,我得到了这样的例外:
at System.Data.Common.UnsafeNativeMethods.IDBInitializeInitialize.Invoke(IntPtr pThis)
at System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString constr, SessionWrapper& sessionWrapper) at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
at GetCustomer(String card)Thread was being aborted.System.Data
和
System.Runtime.InteropServices.Marshal.ReadInt16(IntPtr ptr, Int32 ofs)
System.Data.ProviderBase.DbBuffer.ReadInt16(Int32 offset)
System.Data.OleDb.ColumnBinding.Value_I2()
System.Data.OleDb.ColumnBinding.Value()
System.Data.OleDb.OleDbDataReader.GetValue(Int32 ordinal)
System.Data.OleDb.OleDbDataReader.get_Item(Int32 index)
Thread was terminated.mscorlib
感谢您的帮助。
答案 0 :(得分:0)
看起来它正在文件中的最后一条记录上捕获异常然后,因为已经到达文件结尾,它只是一遍又一遍地抛出异常和continue
。
我怀疑你不需要两个继续语句,但只有一个(内部语句)。
您应该以不需要例外来控制程序流的方式重写它。
答案 1 :(得分:0)
我注意到你在catch
区域内执行此操作:
Connector.writeLog(...
什么类是Connector
,它在writeLog
内做了什么?它是否尝试将错误信息写入数据库中的表,还是写入文件或事件日志或其他内容?
此外,这可能是一个拼写错误,但在您的代码示例中,您关闭的是与您打开的连接(vsiDB
)不同的连接(db
)。