DbCommand :执行超时已过期。完成操作之前已超时或服务器未响应。

问题:“Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。”的解决方法

 

在一个链接数据库的时候,老是出现超时的错误:执行超时已过期。完成操作之前已超时或服务器未响应。 

就是给这个链接加上一个TimeOut的属性

复制代码
 public static DataSet ExeQuery(string Cmd)
    {

        Database db = DatabaseFactory.CreateDatabase(connstring_TMS);
        DbConnection conn = db.CreateConnection();
        try
        {
            DbCommand comm = conn.CreateCommand();
            comm.CommandTimeout = 5000;//500秒,单位是秒
            conn.Open();
            comm.CommandText = Cmd;
            DbDataReader read = comm.ExecuteReader();
            return ConvertDataReaderToDataSet(read);
        }

        finally
        {
            conn.Close();
            conn = null;
        }
    }
复制代码
复制代码
 1  public static DataSet ConvertDataReaderToDataSet(DbDataReader reader)
 2     {
 3         DataSet dataSet = new DataSet();
 4         do
 5         {
 6             // Create new data table
 7             DataTable schemaTable = reader.GetSchemaTable();
 8             DataTable dataTable = new DataTable();
 9             if (schemaTable != null)
10             {
11                 // A query returning records was executed 
12                 for (int i = 0; i < schemaTable.Rows.Count; i++)
13                 {
14                     DataRow dataRow = schemaTable.Rows[i];
15                     // Create a column name that is unique in the data table 
16                     string columnName = (string)dataRow["ColumnName"]; //+ " // Add the column definition to the data table 
17                     DataColumn column = new DataColumn(columnName, (Type)dataRow["DataType"]);
18                     dataTable.Columns.Add(column);
19                 }
20                 dataSet.Tables.Add(dataTable);
21                 // Fill the data table we just created
22                 while (reader.Read())
23                 {
24                     DataRow dataRow = dataTable.NewRow();
25                     for (int i = 0; i < reader.FieldCount; i++)
26                     {
27                         dataRow[i] = reader.GetValue(i);
28                     }
29                     dataTable.Rows.Add(dataRow);
30                 }
31             }
32             else
33             {
34                 // No records were returned
35                 DataColumn column = new DataColumn("RowsAffected");
36                 dataTable.Columns.Add(column);
37                 dataSet.Tables.Add(dataTable);
38                 DataRow dataRow = dataTable.NewRow();
39                 dataRow[0] = reader.RecordsAffected;
40                 dataTable.Rows.Add(dataRow);
41             }
42         }
43         while (reader.NextResult());
44         return dataSet;
45     } 
复制代码

 

posted @   ProZkb  阅读(12054)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示