SQL Server抱怨它没有任何东西,我想,这比充满其他东西更好。 This question有一些非常有趣的答案,特别是史蒂文的答案。
然而,在运行他提供的脚本之后,我没有看到TRANSACTION或BACKUP作为log_reuse_wait_description列中的条目,我只看到" NOTHING"和"检查点"每个" state_desc"价值是"在线"以及每一个" recovery_model_desc"是" SIMPLE"。所有"最后完全备份" vals也是一样的 - 2014年10月31日 - 差不多一年半之前。
我很长时间没有DBAdmin,所以不知道这些是什么意思,或者最重要的是,如何防止错误信息发生。
我可以从C#端做些什么来防止这种情况"什么都没有"发生错误?
整个错误信息是:
日期:2016/3/7 2:24:45消息:2016年3月7日星期一:异常消息:数据库' tempdb'的事务日志由于充满了 ' NOTHING&#39 ;.异常来源:.Net SqlClient数据提供程序异常 StackTrace:at System.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔值breakConnection,Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& dataReady)at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()at System.Data.SqlClient.SqlDataReader.get_MetaData()at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,String resetOptionsString)at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async,Int32超时,任务& task,Boolean asyncWrite,SqlDataReader ds,Boolean describeParameterEncryptionRequest)at System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String 方法,TaskCompletionSource`1完成,Int32超时,任务&任务, 布尔asyncWrite)at System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String 方法)at System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior 行为,String方法)at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(的CommandBehavior 行为) System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(的CommandBehavior 在System.Data.Common.DbDataAdapter.FillInternal(DataSet。)的行为) dataset,DataTable [] datatables,Int32 startRecord,Int32 maxRecords, 字符串srcTable,IDbCommand命令,CommandBehavior行为)at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand命令, CommandBehavior行为)at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)at ReportRunner.SharedCode.SQLDBHelper.ExecuteSQLReturnDataTable(字符串 sql,CommandType cmdType,SqlParameter []参数)
因此,在该msg中引用的我的代码是ExecuteSQLReturnDataTable(),它是:
public static DataTable ExecuteSQLReturnDataTable(string connectionStr, string sql, CommandType cmdType, params SqlParameter[] parameters)
{
using (DataSet ds = new DataSet())
using (SqlConnection connStr = new SqlConnection(connectionStr))
using (SqlCommand cmd = new SqlCommand(sql, connStr))
{
cmd.CommandType = cmdType;
cmd.CommandTimeout = EXTENDED_TIMEOUT;
foreach (var item in parameters)
{
cmd.Parameters.Add(item);
}
try
{
cmd.Connection.Open();
new SqlDataAdapter(cmd).Fill(ds);
}
catch (SqlException sqlex)
{
for (int i = 0; i < sqlex.Errors.Count; i++)
{
var sqlexDetail = String.Format("From ExecuteDataSet(), SQL Exception #{0}{1}Source: {2}{1}Number: {3}{1}State: {4}{1}Class: {5}{1}Server: {6}{1}Message: {7}{1}Procedure: {8}{1}LineNumber: {9}",
i + 1, // Users might get the fantods if they saw #0
Environment.NewLine,
sqlex.Errors[i].Source,
sqlex.Errors[i].Number,
sqlex.Errors[i].State,
sqlex.Errors[i].Class,
sqlex.Errors[i].Server,
sqlex.Errors[i].Message,
sqlex.Errors[i].Procedure,
sqlex.Errors[i].LineNumber);
ReportRunnerConstsAndUtils.HandleException(sqlex);
}
return null; // see https://stackoverflow.com/questions/33883125/how-can-i-defensively-code-against-randomly-referencing-table-0-and-null-value?noredirect=1#comment55530765_33883125
}
catch (Exception ex)
{
ReportRunnerConstsAndUtils.HandleException(ex);
return null;
}
return ds.Tables[0];
}
}
那么我可以添加到此代码中以减轻甚至消除问题吗?