[SqlException (0x80131904): 超时时间已到。在操作完成之前超时时间已过或服务器未响应。]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +925466
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +800118
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +186
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1932
   System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +31
   System.Data.SqlClient.SqlDataReader.get_MetaData() +62
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +1005
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +132
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +122
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) +62
   SqlHelper.ExecuteReader(String connString, CommandType cmdType, String cmdText, SqlParameter[] cmdParms) +207
   Ethnicraft.DAL.PriceProvider.SalesPRiceValueHasSet1(Int32 productVariantId, String customerId) +545
   Ethnicraft.BLL.PriceProvider.ModifySalesPricePerProduct(SqlTransaction trans, String customerID, String productVariantID, String basePriceLevel, String priceLevelID, String calculation, String currency, DateTime ValidateEndDate, String res) +181
   ModifySupplierPercollection.btnsConfirm_Click(Object sender, EventArgs e) in e:\EthnicraftWeb\Modules\product\ModifySupplierPercollection.aspx.cs:463
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint

解决方案 »

  1.   

    Sqltransaction 
    Sqldatareader 
    事务吗????
    哎,兄弟,想想原理先...........
      

  2.   

    Sqldatareader 用Sqltransaction 干嘛
    Sqltransaction 是用在多sql任务写数据库时的
      

  3.   

    DataReader是独占式的,必须将reader关闭后才可以进行其他的数据库操作的。
      

  4.   

    只是查询数据出来,用Sqltransaction完全多余。
      

  5.   

    我程序里面的TRANSACTION是基于查询出来的数据的基础上进行对数据库的更新操作~!
      

  6.   

    采用了Sqltransaction的话,最好所有和数据库有关的操作,都设置事务
      

  7.   

    我也遇到过这种问题,最后查询是改用填充到dataset里来解决问题的.
      

  8.   

    当然可以!与数据集有关操作都可以通过事务来完成啊,可是用事务与sqldatareader对象混合使用时会出现超时问题.
      

  9.   

    可能是因为你的数据量比较大,或回滚的数据比较多。在config中设置一下时间吧
    <system.web> 
    <httpRuntime maxRequestLength="4096" executionTimeout="43200" /> 
    </system.web>
      

  10.   

      我有设置过时间,但是我的程序一调试到EXECUTEREADER这里就会停住不动了....
      

  11.   

                using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString))
                {
                   
                    conn.Open();
                    SqlTransaction trans = conn.BeginTransaction();
                    
                    try
                    {
                        foreach (DataRow row in dt.Rows)
                        //DataRow row = dt.Rows[0];
                        {
                            //PriceProvider.ModifySupplier(null, txtCustomerID.Text, row["productVariantID"].ToString(), ddlSupp.SelectedValue);
                            PriceProvider.ModifySalesPricePerProduct(trans, txtCustomerID.Text, row["ProductVariantID"].ToString(),
                                     ddlBaseonPriceLevel1.SelectedItem.Text, txtCustomerID.Text, txtFormula1.Text, ddlCurrency1.SelectedItem.Text,
                                     Convert.ToDateTime(TxtValidateEndDate1.Text), txtRes.Text);                        //lblmsgSupp.Text =lblmsgSupp.Text+ row["productVariantID"].ToString();
                        }
                        trans.Commit();
                        trans.Dispose();
                        trans = null;                    lblmsgSupp.Text = "succeed";
                        initDataTable();
                    }
                    catch
                    {
                       // trans1.Rollback();
                        trans.Rollback();
                        //lblmsgSupp.Text = conn.ConnectionTimeout.ToString();
                        throw;
                    }
    其实如果不加FOREACH 这段代码可以运行成功,可是一但加上foreach以后 运行到第一个调用ExecuteReader的地方就卡住超时了....
    我百思不得其解
      

  12.   

    //
      // 摘要:
      // Gets or sets the wait time before terminating the attempt to execute a command
      // and generating an error.
      //
      // 返回结果:
      // The time in seconds to wait for the command to execute. The default is 30
      // seconds.
      [ResDescription("DbCommand_CommandTimeout")]
      [ResCategory("DataCategory_Data")]
      public override int CommandTimeout { get; set; }
    默认是30秒 自己设一下吧