插入/更新行会导致从调试模式返回

时间:2015-03-09 11:56:08

标签: c# oracle

您可以帮我在C#中将行插入Oracle数据库吗?

我有foreach并且在其中我只是进行sql查询..然后当我尝试插入数据库(支持debbuging)时,第一行插入几毫秒但第二次插入/更新大约是5分钟..所有的魔力都在cmd.ExecuteNonQuery(); 第二行插入/更新debbuger返回焦点到应用程序,然后在cca 5分钟后返回到debbuger ..但它的简单更新,所以没有那么多时间需要..

        using (var connection = new OracleConnection(_connectionTNS)) 
        {
            connection.Open();
            var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);

            int rowsInserted = 0;


            foreach (var item in _tableNameAndColumnsList)
            {
                if (item.Replace)
                {
                    using (OracleCommand cmd = new OracleCommand())
                    {
                        cmd.Connection = connection;
                        cmd.Transaction = transaction;
                        cmd.CommandText = "UPDATE TABLE TEST WHERE id_test = "+id_test+" ";
                        rowsInserted += cmd.ExecuteNonQuery();
                    }
                }
            }

            transaction.Commit();
            MessageBox.Show("Changed " + rowsInserted + " database rows...");

你有同样的问题吗? 谢谢Lukas

1 个答案:

答案 0 :(得分:1)

您正在每个循环中创建一个不需要的新连接,您应该避免它用于网络消费

using (OracleCommand cmd = new OracleCommand())
{
    cmd.Connection = connection;
    cmd.Transaction = transaction;
    foreach (var item in _tableNameAndColumnsList)
    {
        if (item.Replace)
        {
            cmd.CommandText = "UPDATE TABLE TEST WHERE id_test = "+id_test+" "; /*Assuming this is only test command*/
            rowsInserted += cmd.ExecuteNonQuery();
        }
    }
}

P.S。不要忘记,请使用参数化查询以避免SQL注入。