Мне бы очень хотелось, чтобы некоторые советы по этому поводу, поскольку я столкнулся с этой проблемой совсем немного. У меня есть несколько приложений, как больших, так и маленьких, где мне нужно сделать некоторую работу с Netezza. К сожалению, это типичная проблема с .net и Netezza, Netezza принимает команду sql, выполняет ее (я подтвердил ее в журнале), но периодически не отправляет обратную ссылку, а мое соединение OLEDB в моем приложении C# просто сидит там и временами. В журнале Netezza я также вижу, что моя сессия просто сидит там открыто, потому что мое приложение все еще ждет, когда NZ отправит что-то обратно. Это происходит только при соединении, которое выполняет более 1 команды.C# SQL вставить в Netezza. Netezza не отправляет возврат, C# код тайм-аут
В любом случае, ниже приведен код, и я хочу получить совет относительно того, как смягчить эту проблему. Я в настоящее время, но в числе повторных попыток, но мне бы очень хотелось, чтобы что-то было более безопасным. Кто-нибудь имеет какие-либо советы о том, как справиться с такой проблемой, когда вы не можете получить возврат?
Этот конкретный цикл составляет около 135 записей, и требуется только 1 минута. Отсутствие возврата не связано с какой-либо конкретной записью. Это совершенно случайно и происходит и в других приложениях.
Любой совет будет оценен! Спасибо!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.OleDb;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using System.Security.Cryptography;
using System.IO;
namespace RemoveVoidedInvoices
{
class UpdateNetezza
{
public bool NetezzaWorkFailure = false;
private void NetezzaWorkFailed()
{
NetezzaWorkFailure = true;
}
public void updateCounts(List<RecordCounts> recordCounts)
{
string connString = string.Format("Provider=NZOLEDB;Data Source={0};Initial Catalog=EBIDW;User ID=MYUSERNAME;Password={1}", Environment, passWord);
OleDbConnection netezzaConn = null;
//Due to timeout issues I am making a quick timespan entry so that I can keep track in the log of how long each day the bulk update took
DateTime Prequery = DateTime.Now;
int retrycount = 0;
try
{
netezzaConn = new OleDbConnection(connString);
netezzaConn.Open();
for (int i = 0; i < recordCounts.Count; i++)
{
try
{
if (recordCounts[i].RecordCount.ToString() != recordCounts[i].OrigCount.ToString())
{
string updateStatement = string.Format("UPDATE fct_ourtable SET LINESWRITTENTOFILE = {0} where EXTRACTFILENAME = '{1}' and LINESWRITTENTOFILE = {2}", recordCounts[i].RecordCount.ToString(), recordCounts[i].FileName, recordCounts[i].OrigCount.ToString());
Console.WriteLine("Executing query : " + updateStatement);
Console.WriteLine("Query start-time - " + DateTime.Now.ToString());
OleDbCommand exe = new OleDbCommand(updateStatement, netezzaConn);
exe.CommandTimeout = 2000;
int rowsUpdated;
rowsUpdated = exe.ExecuteNonQuery();
Console.WriteLine("Rows Updated = " + rowsUpdated.ToString());
Console.WriteLine("Query end-time - " + DateTime.Now.ToString());
Console.WriteLine();
}
else
{
Console.WriteLine("No records were removed from the file : " + recordCounts[i].FileName + ". Not updating Netezza.");
Console.WriteLine();
}
}
catch (OleDbException oledbex)
{
retrycount++;
if (retrycount > 3)
{
Console.WriteLine("Maximum number of retrys met. Canceling now.");
throw new System.Exception();
}
else
{
i = i - 1;
Console.WriteLine("Timeout on Query, retrying");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
NetezzaWorkFailed();
}
finally
{
if (netezzaConn != null)
{
netezzaConn.Close();
netezzaConn = null;
}
TimeSpan duration = DateTime.Now.Subtract(Prequery);
Console.WriteLine("Query Time: " + duration);
}
}
}
}