Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sql中几秒钟后消失的“未指定错误”_C#_Linq To Sql - Fatal编程技术网

C# sql中几秒钟后消失的“未指定错误”

C# sql中几秒钟后消失的“未指定错误”,c#,linq-to-sql,C#,Linq To Sql,我构建了一个解析器,它接收存储在xml文件中的数据,并使用linq to sql将其发送到Microsoft Access数据库。我有sql insert命令,它们可以工作。。。直到他们没有 奇怪的是,我运行每个SQL命令,我将它们保存在一个列表中,每次执行一个命令,前40个左右的命令运行良好,直到它们开始出现未指定的错误。问题是,如果我吞下异常,而让异常捕获器继续重试,几秒钟后,它们就会重新开始工作。这意味着它不是SQL查询本身的错误,至少不是它的编写方式的错误 此模式会重复数千次插入。如果我

我构建了一个解析器,它接收存储在xml文件中的数据,并使用linq to sql将其发送到Microsoft Access数据库。我有sql insert命令,它们可以工作。。。直到他们没有

奇怪的是,我运行每个SQL命令,我将它们保存在一个列表中,每次执行一个命令,前40个左右的命令运行良好,直到它们开始出现未指定的错误。问题是,如果我吞下异常,而让异常捕获器继续重试,几秒钟后,它们就会重新开始工作。这意味着它不是SQL查询本身的错误,至少不是它的编写方式的错误

此模式会重复数千次插入。如果我做正常的异常处理,程序只会在错误发生时跳过一些记录,并在导致它暂时消失时继续插入。如果我让它运行它的进程,它会插入一些记录,跳过一些,插入,跳过,重复,最后插入不到2/3的记录

我的电脑为什么只运行40次左右的插入,然后在一个随机但很短的间隔内拒绝运行更多的插入

我不知道是什么导致了这一切

应用程序本机运行;它不使用任何服务器/web通信,我在查找未指定错误时发现的所有错误都指向ADO.NET应用程序中出现的错误

以下是发生错误的代码:

public static string insertQuery(string sql)
    {
        string connetionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Owner\Desktop\Arbeit\TrademarkParserproject1\TrademarkParserproject\bin\x86\Debug\Database.accdb";
        OleDbConnection connection;
        OleDbDataAdapter oledbAdapter = new OleDbDataAdapter();
        connection = new OleDbConnection(connetionString);

        string success = "false";

        try
        {
            connection.Open();
            oledbAdapter.InsertCommand = new OleDbCommand(sql, connection);
            oledbAdapter.InsertCommand.ExecuteNonQuery();

        }

        catch (Exception ex)
        {
            success = ex.ToString();
            return success;
        }

        success = "true";
        return success;
    }

注意,我让应用程序在X86模式下运行,以避免ACE.OLEDB.12.0适配器出现错误

最突出的一点是,您从未关闭/处置您的SqlConnection。OLEDB数据适配器也是一次性的,应该弃置。“using”语句在这里是一种方便的构造:

public static string insertQuery(string sql)
{
    string connetionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Owner\Desktop\Arbeit\TrademarkParserproject1\TrademarkParserproject\bin\x86\Debug\Database.accdb";
    using(var oledbAdapter = new OleDbDataAdapter())
    using(var connection = new OleDbConnection(connetionString))
    {
        string success = "false";

        try
        {
            connection.Open();
            oledbAdapter.InsertCommand = new OleDbCommand(sql, connection);
            oledbAdapter.InsertCommand.ExecuteNonQuery();
        }

        catch (Exception ex)
        {
            success = ex.ToString();
            return success;
        }

        success = "true";
        return success;
    }
}

最突出的一点是,您从不关闭/处置SqlConnection。OLEDB数据适配器也是一次性的,应该弃置。“using”语句在这里是一种方便的构造:

public static string insertQuery(string sql)
{
    string connetionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Owner\Desktop\Arbeit\TrademarkParserproject1\TrademarkParserproject\bin\x86\Debug\Database.accdb";
    using(var oledbAdapter = new OleDbDataAdapter())
    using(var connection = new OleDbConnection(connetionString))
    {
        string success = "false";

        try
        {
            connection.Open();
            oledbAdapter.InsertCommand = new OleDbCommand(sql, connection);
            oledbAdapter.InsertCommand.ExecuteNonQuery();
        }

        catch (Exception ex)
        {
            success = ex.ToString();
            return success;
        }

        success = "true";
        return success;
    }
}

就这样!故障一定是由于同时打开了这么多个连接而没有处理它们造成的。非常感谢。就这样!故障一定是由于同时打开了这么多个连接而没有处理它们造成的。非常感谢。