System.Data.SqlClient.SqlDataReader rdr1;
System.Data.SqlClient.SqlCommand sqlComm=new System.Data.SqlClient.SqlCommand();
System.Data.SqlClient.SqlConnection sqlConn=new System.Data.SqlClient.SqlConnection();
sqlConn.ConnectionString="data source=TSTSERVER;initial catalog=FSDBST;user id=lei;password=lei";
sqlConn.Open();
sqlComm.Connection=sqlConn;
sqlComm.CommandText="select Top 1 MOHeaderKey from FS_MOHeader where MONumber='" +MONumber+"'";
rdr1=sqlComm.ExecuteReader(CommandBehavior.CloseConnection);
if (rdr1.Read()==false)
{
string MessageMO="MO单号:"+MONumber+"不存在";
Console(MessageMO);
}
else
{
int nMoHeaderKey=rdr1.GetInt32(0);
sqlComm.CommandText="select top 1 MoLineKey,ItemKey,ItemOrderedQuantity from FS_MOLine where MOHeaderKey='"+nMoHeaderKey+"' and MOLineNumber='"+Line+"'";
rdr1=sqlComm.ExecuteReader(CommandBehavior.CloseConnection);
if (rdr1.Read()==false)
{
string MessageMO="MO单号:"+MONumber+"行号:"+Line+"不存在";
Console(MessageMO);
}
}
运行时总时提示第二处的rdr1=sqlComm.ExecuteReader我想在一个模块的运行两次,应该怎么办,现头昏,请指教呀,

解决方案 »

  1.   

    一次只能打开一个datareader,可以用dataset
      

  2.   

    第一个ExecuteReader没有Close。
    在第二处重新声明一个SqlDataReader对象试试。
      

  3.   

    用这个SQL也行:
    "select top 1 MoLineKey,ItemKey,ItemOrderedQuantity from FS_MOLine where MOHeaderKey in (select Top 1 MOHeaderKey from FS_MOHeader where MONumber='" +MONumber+"') and MOLineNumber='"+Line+"'"
      

  4.   

    我也把RDR1.CLOSE()加进去了,但结果还是有错误,重新声明SqlDataReader也试过,也是执行到那里就错误窗口
      

  5.   

    panjf(Troj)兄,非常感谢,但有无办法多次引用SqlDataReader
      

  6.   

    to 我也把RDR1.CLOSE()加进去了,但结果还是有错误,重新声明SqlDataReader也试过,也是执行到那里就错误窗口如何加的,代码是什么
      

  7.   

    因为我的资料判断多达15个资料段,我是想用一个循环来做,用SQLSERVER语句的话,需要关闭打开数据库多次!
      

  8.   

    to 非常感谢,但有无办法多次引用SqlDataReaderUse DataAdapter + DataSet
      

  9.   

    {
    int nMoHeaderKey=rdr1.GetInt32(0);
    sqlComm.CommandText="select top 1 MoLineKey,ItemKey,ItemOrderedQuantity from FS_MOLine where MOHeaderKey='"+nMoHeaderKey+"' and MOLineNumber='"+Line+"'";
    System.Data.SqlClient.SqlDataReader rdr2;
    rdr2=sqlComm.ExecuteReader(CommandBehavior.CloseConnection);
    if (rdr2.Read()==false)
    {
    string MessageMO="MO单号:"+MONumber+"行号:"+Line+"不存在";
    Console(MessageMO);
    }
    }这个是重新申明的!
      

  10.   

    else
    {
    rdr1.Close();
    int nMoHeaderKey=rdr1.GetInt32(0);
    sqlComm.CommandText="select top 1 MoLineKey,ItemKey,ItemOrderedQuantity from FS_MOLine where MOHeaderKey='"+nMoHeaderKey+"' and MOLineNumber='"+Line+"'";
    rdr1=sqlComm.ExecuteReader(CommandBehavior.CloseConnection);
    if (rdr1.Read()==false)
    {
    string MessageMO="MO单号:"+MONumber+"行号:"+Line+"不存在";
    Console(MessageMO);
    }
    }
    这个是关闭的!谢Knight94(愚翁)
      

  11.   

    rdr1.Close();
    int nMoHeaderKey=rdr1.GetInt32(0);关闭怎么访问
      

  12.   

    不小心搞错了!
    现在并不是说这个取值的问题,主要是要多次使用rdr1=sqlComm.ExecuteReader(CommandBehavior.CloseConnection)的问题
      

  13.   

    你是在If中关闭的,而在else中是没有关闭,当然会出错。
    用同一个connection不能同时打开两个datareader。
      

  14.   

    sorry!
    看错了,这段代码是关闭了,其实你不用关闭connection,你可以如下:rdr1=sqlComm.ExecuteReader();
    int nMoHeaderKey = -1;//Init value with "-1"
    if( rdr1.Read() )
    {
        nMoHeaderKey=rdr1.GetInt32(0);
    }//Close data reader object
    rdr1.Close();
    if( nMoHeaderKey > 0 )
    {
        sqlComm.CommandText="select top 1 MoLineKey,ItemKey,ItemOrderedQuantity from    FS_MOLine where MOHeaderKey='"+nMoHeaderKey+"' and MOLineNumber='"+Line+"'";
        rdr1=sqlComm.ExecuteReader();
        //Read data using "rdr1"
    }