gpt4 book ai didi

c# - ExecuteScalar "Specified cast is not valid"异常

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

以下代码行有时会导致“指定的转换无效”异常:

public static object Select(string sql, OleDbTransaction dbt)
{
try
{
OleDbCommand cmd = new OleDbCommand(sql, lib.dbc, dbt);
object obj = cmd.ExecuteScalar(); /* <- this is what fails */
return obj;
}
catch (Exception ex)
{
/* deleted code - error message to the user */
return null;
}
}

这个函数在程序中执行了几次才失败。如果在新的执行线程中执行时会失败 olny,然后只有有时。当我调用在线程中执行处理的程序部分并调用此函数时,它要么一直工作(=>我单击按钮,它执行,没有错误,我单击并一次又一次地执行.. .),或者它永远不起作用(=> 我单击按钮并执行,异常,我再次单击并执行,再次异常...)。

lib.dbc -> OleDbConnection 类型的静态变量仅在程序启动时初始化,并且在整个代码中经常使用,有效

我不知道如何进一步调试它,最重要的是,对对象类型变量的什么赋值会失败? ExecuteScalar 应返回对象或 null。我使用的数据库是 Jet (MS Access)。

在异常中我找到了这个堆栈跟踪,也许它可以帮助:

at System.Data.OleDb.OleDbConnection.IOpenRowset()
at System.Data.OleDb.OleDbCommand.ExecuteTableDirect(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteScalar()
at FK.sql.Select(String sql, OleDbTransaction dbt)

最佳答案

If fails olny when it's executed in a new execution thread, and then only sometimes.

这个语句,结合您将连接作为参数传递的事实,表明您可能正在尝试在多个线程上使用相同的数据库连接,也许还有事务。

不要:而是每次要访问数据库时都创建一个新连接:连接池意味着这将是高效的。

关于c# - ExecuteScalar "Specified cast is not valid"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21802147/

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