我尝试使用C#作为前端在MySQL DB中插入数据。该查询在Windows服务应用程序中运行,并且整个执行在线程上运行。几个小时的服务执行后,我得到一个错误。该服务以10分钟的间隔运行。假设它已在上午6:00执行,那么它将以上午6:10的顺序再次执行。在每次运行中,它将在数据库中插入约50行。
执行几个小时后引发的错误如下。这是我的错误日志中的示例。
InsertData中的MySqlException命令期间遇到致命错误 执行::: MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 行为) 在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 在MySql.Data.MySqlClient.SchemaProvider.GetProcedures(String []限制) 在MySql.Data.MySqlClient.ISSchemaProvider.GetProcedures(String [] 限制) 在MySql.Data.MySqlClient.ISSchemaProvider.GetSchemaInternal(String 集合,String []限制) 在MySql.Data.MySqlClient.SchemaProvider.GetSchema(String集合,String []限制) 在MySql.Data.MySqlClient.MySqlConnection.GetSchema(String collectionName,String [] strictionValues) 在MySql.Data.MySqlClient.ProcedureCache.GetProcData(MySqlConnection 连接,字符串spName) 在MySql.Data.MySqlClient.ProcedureCache.AddNew(MySqlConnection连接,字符串spName) 在MySql.Data.MySqlClient.ProcedureCache.GetProcedure(MySqlConnection conn,字符串spName) 在MySql.Data.MySqlClient.StoredProcedure.GetParameters(字符串procName) 在MySql.Data.MySqlClient.StoredProcedure.Resolve(布尔准备) 在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 行为) 在MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() 在InsertData(String Name,String Info,String Output)处::内部异常1:致命错误 尝试读取结果集时遇到。::内部异常2: 从流中读取失败。::内部异常3:无法 从传输连接读取数据:阻止操作是 由对WSACancelBlockingCall的调用中断。::内部异常4:A 调用WSACancelBlockingCall中断了阻止操作]
我在日志中添加了多达四个级别的内部异常,以便可以发现一些线索。内部异常开始的标题为内部异常1,内部异常2,依此类推。
下面是我的代码。
internal static int UpdateDataInToDB(DataInformation info)
{
MySqlCommand mySqlCommand = new MySqlCommand("ProcInsertData", mySqlCon);
try
{
int rowCount = 0;
mySqlCommand.CommandType = CommandType.StoredProcedure;
mySqlCommand.Parameters.Add("@Param1", DbType.Int64).Value = info.ID;
mySqlCommand.Parameters.Add("@Param2", DbType.String).Value = info.Name;
mySqlCommand.Parameters.Add("@Param3", DbType.String).Value = info.Address;
mySqlCommand.Parameters.Add("@Param4", DbType.Int32).Value = info.Age;
mySqlCommand.Parameters.Add("@Param5", DbType.DateTime).Value = info.DOB;
mySqlCommand.Parameters.Add("@Param6", DbType.Int32).Value = info.RollNo;
mySqlCommand.CommandTimeout = 120;
rowCount = Convert.ToInt32(mySqlCommand.ExecuteNonQuery());
}
catch (MySqlException ex)
{
//MySqlException logging
ResetDBConnection();
}
catch (Exception ex)
{
//Exception logging
}
finally
{
if (mySqlCommand != null) mySqlCommand.Dispose();
mySqlCon.CloseConnection();
}
return rowCount;
}
我在代码中没有使用任何DataReader,但是我不知道该ExecuteReader从何处出现代码抛出的错误文本。我在连接字符串中设置了“ pooling = false”。
任何帮助将不胜感激。