SqlDataReader dr=Comm.ExecuteReader();   
if(dr.Read())
{
dr.Close();
int type;
//MessageBox.Show("suc","jieguo"); SqlCommand Comm2=new SqlCommand("select type from login where name= '" + textBox1.Text + "'and password=" + textBox2.Text,Conn);
SqlDataReader dr2 = Comm2.ExecuteReader();

//type=dr2.GetSqlBoolean(3).ToSqlInt32(); Form2 a =new Form2();
a.Show();

}问题:1:如何简化以上的代码?非得dr.Close();后才进行新的查询吗?2:Comm2查询的sql里对应的bit数据类型,如何把它取出来?我想赋给一个int该怎么做?谢谢

解决方案 »

  1.   

    SqlDataReader dr=Comm.ExecuteReader();   
    if(dr.Read())
    {
    dr.Close();
    int type; Comm.CommandText="select type from login where name= '" + textBox1.Text + "'and password=" + textBox2.Text;
    SqlDataReader dr2 = Comm.ExecuteReader();
    Form2 a =new Form2();
    a.Show();

    }1,datareader取得數據之後,就要關掉!但Command對象可以多次使用.
    2,int val=Convert.ToInt32(dr2[index])//使用強制轉換把相應的列轉為整形。
      

  2.   

    Comm.CommandText="select type from login where name= '" + textBox1.Text + "'and password=" + textBox2.Text;
    SqlDataReader dr2 = Comm.ExecuteReader();
        if(dr2.HasRows==true)
    type=Convert.ToInt32(dr2[3]);为什么if可执行但type=Convert.ToInt32(dr2[3]);这句说“在没有任何数据的时候进行无效的读取尝试”?
      

  3.   

    SqlDataReader dr=Comm.ExecuteReader();   
    if(dr.Read())
    {
    dr.Close();
    int type;
    Comm.CommandText="select type from login where name= '" + textBox1.Text + "'and password=" + textBox2.Text;
    SqlDataReader dr2 = Comm.ExecuteReader();
    Form2 a =new Form2();
    a.Show();
    }
    1.datareader每次使用后需要关闭,Command的TEXT可以多次赋值
    2.int type=Convert.ToInt32(dr2.GetSqlBoolean(3);
      

  4.   

    最后一个问题:dr2[index],这里index怎么用?怎么老说我越界?是不是我的sqlserver里是第n列它就是n-1?如果有多条记录符合条件怎么找到第n行第m列的记录?再次感谢~
      

  5.   

    因为sql查询这样写了:select type是不是不用写index?但我留空的话又会编译错误。。
      

  6.   

    int type=Convert.ToInt32(dr2.GetSqlBoolean(3);
      

  7.   

    做个数据库操作类,把查询\更新等操作封装到里面,用的时候,只要调用该方法就行了.
    具体可以往上查询  "java bean 数据库连接", 照着改动一下就行.