string CmdText = "select TARGETTABLE,ISCURRENTDB,DBCONSTRING from DW_B_SSJKB_DUMPSETTING where SOURCETABLE = 'DWSSJK.DW_TX_SSJK_HISTORY_DATA'";
DataSet ds = SqlHelper.ExecuteDataSet(SqlConnectionString, CmdText, "SqlConnectionString");
if (ds.Tables[0].Rows[0][ISCURRENTDB] == '0')

  CmdText = "select VALUE_TIME,TAG_VALUE from DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS,DWSSJK.DW_TX_SSJK_HISTORY_DATA"
  + "where (DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS.VALUE_TIME between startTime and endTime )"
  + "and (DWSSJK.DW_TX_SSJK_HISTORY_DATA.VALUE_TIME between startTime and endTime)";
  ds = SqlHelper.ExecuteDataSet(sqlConnectionString, CmdText, "SqlConnectionString");
}如果执行
ds.Tables[0].Rows[0][ISCURRENTDB] == '0' 为真那么 执行完后 
ds.Tables[0] 是上面一句的 SqlHelper.ExecuteDataSet 执行结果的表 还是下面一句 SqlHelper.ExecuteDataSet 执行结果的表
如果是上面的 那下面的是 ds.Tables[1] 吗 ?
如果是下面的 那上面的 哪里去了?

解决方案 »

  1.   

    下面的,上面的被覆盖了。应该用fill可以保存成table[1]吧
      

  2.   

    ds 在第二次SqlHelper.ExecuteDataSet的时候,重新赋值了
      

  3.   

    ds.Tables[0] 是下面那一句的结果
    SqlHelper.ExecuteDataSet每次都会创建一个DataSet返回回来,
    第一次执行得到一个DataSet对象,并且ds指向这个对象
    第二次执行得到另一个DataSet对象,并且ds指向这个新的对象
    这就导致第一个DataSet没有变量指向它,所以它再也访问不到了。
      

  4.   

    首先指出:你的“ds.Tables[0].Rows[0][ISCURRENTDB] == '0' ”這句代碼是不是有點兒問題,字符串的比較應該用“0”,而不是‘0’,而且上前面最好改為Rows[0][ISCURRENTDB].ToString().Trim()
    如果滿足條件執行到if里面的語句的話,ds.tables[0]應該是后面一條語句得到的table,把之前的table覆蓋了
    不過你完全可以輸出一下,驗證一下到底是哪一個。
      

  5.   


    string CmdText = "select TARGETTABLE,ISCURRENTDB,DBCONSTRING from DW_B_SSJKB_DUMPSETTING where SOURCETABLE = 'DWSSJK.DW_TX_SSJK_HISTORY_DATA'"; 
    DataSet ds = SqlHelper.ExecuteDataSet(SqlConnectionString, CmdText, "SqlConnectionString"); 
    这个dataset是DW_B_SSJKB_DUMPSETTING 的
    if (!(ds.Tables(0).Rows(0).Item("ISCURRENTDB") + "" == System.DBNull.Value))
    { //最好判断一下又没有数据
    if (ds.Tables(0).Rows(0).Item("ISCURRENTDB") == '0') 

      CmdText = "select VALUE_TIME,TAG_VALUE from DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS,DWSSJK.DW_TX_SSJK_HISTORY_DATA" 
      + "where (DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS.VALUE_TIME between startTime and endTime )" 
      + "and (DWSSJK.DW_TX_SSJK_HISTORY_DATA.VALUE_TIME between startTime and endTime)"; 
      ds = SqlHelper.ExecuteDataSet(sqlConnectionString, CmdText, "SqlConnectionString"); 
      //这个dataset是现在的,前面的ds已经被清空。

    }
      

  6.   


    string CmdText = "select TARGETTABLE,ISCURRENTDB,DBCONSTRING from DW_B_SSJKB_DUMPSETTING where SOURCETABLE = 'DWSSJK.DW_TX_SSJK_HISTORY_DATA'"; 
    DataSet ds = SqlHelper.ExecuteDataSet(SqlConnectionString, CmdText, "SqlConnectionString"); 
    //这个dataset是DW_B_SSJKB_DUMPSETTING 的
    if (!(ds.Tables(0).Rows(0).Item("ISCURRENTDB") + "" == System.DBNull.Value))
    { //最好判断一下又没有数据
    if (ds.Tables(0).Rows(0).Item("ISCURRENTDB") == '0') 

      CmdText = "select VALUE_TIME,TAG_VALUE from DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS,DWSSJK.DW_TX_SSJK_HISTORY_DATA" 
      + "where (DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS.VALUE_TIME between startTime and endTime )" 
      + "and (DWSSJK.DW_TX_SSJK_HISTORY_DATA.VALUE_TIME between startTime and endTime)"; 
      ds = SqlHelper.ExecuteDataSet(sqlConnectionString, CmdText, "SqlConnectionString"); 
      //这个dataset是现在的,前面的ds已经被清空。

    }
      

  7.   

    明白了  谢谢
    如果我要 想保存第一个该怎么办?
    重新定义一个 还是使用 FILL?
    fill怎么使用?
      

  8.   

    都是用SqlHelper. 来查询的 该怎么 FILL
      

  9.   

    DataSet ds1=""
    DataSet ds2=""
    如果想保存两个ds,必须名字不同
    string CmdText = "select TARGETTABLE,ISCURRENTDB,DBCONSTRING from DW_B_SSJKB_DUMPSETTING where SOURCETABLE = 'DWSSJK.DW_TX_SSJK_HISTORY_DATA'"; 
     ds1 = SqlHelper.ExecuteDataSet(SqlConnectionString, CmdText, "SqlConnectionString"); 
    //这个dataset是DW_B_SSJKB_DUMPSETTING 的
    if (!(ds1.Tables[0].Rows[0].Item["ISCURRENTDB"] + "" == System.DBNull.Value))
    { //最好判断一下又没有数据
    if (ds1.Tables[0].Rows[0].Item["ISCURRENTDB"] == '0') 

      CmdText = "select VALUE_TIME,TAG_VALUE from DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS,DWSSJK.DW_TX_SSJK_HISTORY_DATA" 
      + "where (DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS.VALUE_TIME between startTime and endTime )" 
      + "and (DWSSJK.DW_TX_SSJK_HISTORY_DATA.VALUE_TIME between startTime and endTime)"; 
      ds2 = SqlHelper.ExecuteDataSet(sqlConnectionString, CmdText, "SqlConnectionString"); 
      //这个dataset是现在的,数据填充到ds2。  读取 :ds2.Tables(0).Rows(0).Item("xx")} 
    }
      

  10.   


    DataSet ds1=""
    DataSet ds2=""
    如果想保存两个ds,必须名字不同
    string CmdText = "select TARGETTABLE,ISCURRENTDB,DBCONSTRING from DW_B_SSJKB_DUMPSETTING where SOURCETABLE = 'DWSSJK.DW_TX_SSJK_HISTORY_DATA'"; 
     ds1 = SqlHelper.ExecuteDataSet(SqlConnectionString, CmdText, "SqlConnectionString"); 
    //这个dataset是DW_B_SSJKB_DUMPSETTING 的
    if (!(ds1.Tables[0].Rows[0].Item["ISCURRENTDB"] + "" == System.DBNull.Value))
    { //最好判断一下又没有数据
    if (ds1.Tables[0].Rows[0].Item["ISCURRENTDB"] == '0') 

      CmdText = "select VALUE_TIME,TAG_VALUE from DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS,DWSSJK.DW_TX_SSJK_HISTORY_DATA" 
      + "where (DWSSJK.DW_TX_SSJK_HISTORY_DATA_HIS.VALUE_TIME between startTime and endTime )" 
      + "and (DWSSJK.DW_TX_SSJK_HISTORY_DATA.VALUE_TIME between startTime and endTime)"; 
      ds2 = SqlHelper.ExecuteDataSet(sqlConnectionString, CmdText, "SqlConnectionString"); 
      //这个dataset是现在的,数据填充到ds2。DS1就不会被覆盖,  读取 :ds2.Tables[0].Rows[0].Item["ISCURRENTDB"] } 
    }
      

  11.   


    DataSet ds1; 
    DataSet ds2;
      

  12.   


    真的不用定义两个dataset