.net应用程序的oracle连接超时

时间:2010-12-15 18:49:47

标签: c# asp.net sql-server-2005 oracle database-connection

我有以下代码尝试从oracle到SQL Server 2005进行批量复制,并且它会保持超时。我怎样才能延长oracle连接超时?似乎我不能从我在网上看到的内容。

OracleConnection source = new OracleConnection(GetOracleConnectionString());
source.Open();

SqlConnection dest = new SqlConnection(GetSQLConnectionString() );
dest.Open();


OracleCommand sourceCommand = new OracleCommand(@"select * from table");


using (OracleDataReader dr = sourceCommand.ExecuteReader())
            {
                using (SqlBulkCopy s = new SqlBulkCopy(dest))
                {
                    s.DestinationTableName = "Defects";
                    s.NotifyAfter = 100;
                    s.SqlRowsCopied += new SqlRowsCopiedEventHandler(s_SqlRowsCopied);
                    s.WriteToServer(dr);
                    s.Close();
                }
            }

source.Close();
dest.Close();  

这是我的oracle连接字符串:

return "User Id=USER;Password=pass;Data Source=(DESCRIPTION=" +
                    "(ADDRESS=(PROTOCOL=TCP)(HOST=14.12.7.2)(PORT=1139))" +
                    "(CONNECT_DATA=(SID=QCTRP1)));";

2 个答案:

答案 0 :(得分:3)

您可以设置s.BulkCopyTimeout选项

答案 1 :(得分:0)

在您的连接字符串中,有一个“连接生命周期”和“连接超时”参数。您可以相应地进行设置。有关完整参考,请参阅here

顺便说一句,我知道你没有问这个问题,但你有没有考虑过用于迁移数据库记录的ETL工具(例如Informatica,FME等)?虽然您的方法是有效的,但它不会非常高效,因为您将所有记录从一个DB保存到客户端,然后将它们序列化到另一个DB。对于小批量集,这不是一个大问题,但如果您处理数十万行,您可能需要考虑使用官方ETL工具。