मेरे पास एक वर्ग 'डेटाबेस' है जो ADO.net के लिए एक रैपर के रूप में काम करता है। उदाहरण के लिए, जब मुझे किसी प्रक्रिया को निष्पादित करने की आवश्यकता होती है, तो मैं डेटाबेस को कॉल करता हूं। निष्पादन प्रक्रिया (प्रक्रिया नाम, पैरामीटर औरItsValues)।एडीओ के साथ सी # में कुशल एसक्यूएल सर्वर डेडलॉक हैंडलिंग कैसे प्राप्त करें?
हम SQL Server 2000 में डेडलॉक स्थितियों के साथ गंभीर समस्याएं अनुभव कर रहे हैं। हमारी टीम का हिस्सा एसक्यूएल कोड और लेनदेन पर काम कर रहा है ताकि इन घटनाओं को कम किया जा सके, लेकिन मैं इस डेटाबेस वर्ग को डेडलॉक स्थितियों के खिलाफ मजबूत बनाने के बारे में सोच रहा हूं।
हम चाहते हैं कि डेडलॉक पीड़ित शायद कुछ समय के बाद पुनः प्रयास करें, लेकिन मुझे नहीं पता कि यह संभव है या नहीं। यहां उपयोग की जाने वाली विधि के लिए कोड है:
public int ExecuteQuery(string query)
{
int rows = 0;
try
{
Command.Connection = Connection;
Command.CommandType = CommandType.Text;
if(DatabaseType != enumDatabaseType.ORACLE)
Command.CommandText = query;
else
Command.CommandText ="BEGIN " + query + " END;";
if (DatabaseType != enumDatabaseType.SQLCOMPACT)
Command.CommandTimeout = Connection.ConnectionTimeout;
if (Connection.State == ConnectionState.Closed)
Connection.Open();
rows = Command.ExecuteNonQuery();
}
catch (Exception exp)
{
//Could I add here any code to handle it?
throw new Exception(exp.Message);
}
finally
{
if (Command.Transaction == null)
{
Connection.Close();
_connection.Dispose();
_connection = null;
Command.Dispose();
Command = null;
}
}
return rows;
}
क्या मैं कैच ब्लॉक के अंदर यह हैंडलिंग कर सकता हूं?
'थ्रेड स्लीप (100);' पुनः प्रयास करें 'के बाद पुनः प्रयास लूप में थोड़ी देर देरी पर विचार करें;' पुनः प्रयास करें ';' SQL सर्वर को इतना कठिन मारने से रोकने के लिए। –