我在sql2005中写了一句存储过程,在里面执行没有错,它们分别是在2个表里面,用了2句select语句,它们也都是根据同一个字段查的,所以就传了另一个值进去,但是在取值的时候我是这样的:
if (sdr.Read())
{
ATemporarily at = new ATemporarily();
at.Temporarily1 = Convert.ToString(sdr["RoleName"]);
at.Temporarily2 = Convert.ToString(sdr["DepartName"]);
sdr.Close(); //关闭阅读器,与之相关的连接自动关闭
return at;
}
return null;}
第一句能取到值,但是第二句就不行了,是什么意思? 

解决方案 »

  1.   

    不要datareader.(它只能" 逐行 ")
    改用dataSet或者dataTable.
      

  2.   

    if (sdr.Read()) 

    ATemporarily at = new ATemporarily(); 
    at.Temporarily1 = Convert.ToString(sdr["RoleName"]); 
    at.Temporarily2 = Convert.ToString(sdr["DepartName"]); 
    sdr.Close(); //关闭阅读器,与之相关的连接自动关闭 
    return at; 
    } IF改WHILE,SDR.CLOSE()移到循环外。
      

  3.   

    去多了解一下datareader的知识吧。
      

  4.   

    能否給出你的存儲過程
    1.你的數據表中是否存在DepartName列名
    2.你的存儲過程中是否有查出DepartName列名的值你說的2个表里面是否是select RoleName from 表名1select DepartName from 表名1在調用存儲過程中可以出來二個列的值嗎?,
    ,好好看下存儲過程是否有錯,,程式是否正確。
      

  5.   

    看過你的存儲過程后,我想起這一段:    
    string strSQL =”select CustomerID,CompanyName from Customers;”+“select OrderID,CustomerID from Orders;”;
    SqlCommand cmd=new SqlCommand(strSQL,cn);
    SqlDataReader rdr=cmd.ExecuteReader();
    do
      {    
        while(rdr.Read())    
           Console.WriteLine(rdr[0]+rdr[1]);    
           Console.WriteLine();}while(rdr.NextResult()
       ); 
    你再仔細分析下,你那存儲過程中實際是二個select,他產生了二個Result,所以要用到rdr.NextResult()方法,,,Read()只是只進讀的方法,一步一步讀一個Result,所以你試下按上面方法去取你的結果。
      

  6.   

    问题解决了吗。
    我也觉得用dataset 或datatable方便些。
    只要在数据里执行没有问题,用数据集就行