关于ADO.NET@SQL Server&SqlDataReader

先说基础的,说基础的明白了再深的也是一样的。SQL是关系型数据库,所以就决定了对其操作的时候ADO的一些类要相互联系,Connection 类Command对象(ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入数据可用ExecuteNonQuery()方法来执行插入命令)DataReader类,DataSet对象,DataAdapter类等等,记住我们需要抓住的是主要的也就是中间的类或者对象,就是Command对象,抓住主要的得了,次要的都要和他发生关系(有点猥琐,嘿嘿),记住你要顶住他,观察其他的类的动作,上例子:

SqlConnection Conn = new SqlConnection(ConfigurationSettings.AppSettings[0].ToString());

string str;

 str = "select CarNo,CarCla  from CarIn ";
            Conn.Open();
            SqlCommand datacommand = new SqlCommand(str, Conn);
            SqlDataReader reader = datacommand.ExecuteReader();
            int i = 0;
            while (reader.Read())

{  
      Console.WriteLine(String.Format("{0}, {1}",  
          reader[0], reader[1]));  

  } 

看红色部分,都是围绕SqlCommand展开的;

顺便说下SqlDataReader他是读取是一行,如果你想让他把数据都读取的话要用到循环,但是这个不是他的强项。我认为他的强项是读取一行的数据,读取速度快,切记他读取的数据和你str = "select CarNo from CarIn ";这句话有很大的关系,再重复一遍,他是读取一行的数据,另起一行的话,他要重新从[0]开始,所以这个不适合保存或者操作数据(比如你要对读取的一列数据经行操作的话是不可行的,像上面显示还是可以的)而这个数组取决于你选择的相str = "select CarNo,PortNam  from CarIn ";这个读取的话就是 read[0]和read[1]。所以这样的话你要对整个数据经行操作的话,很显然这个类不合适了,切记,他只是读取一行,我太啰嗦了。。。。

当然如果你确实想操作这些数据,我们可以以数组的形式读取出来,前提是你必须知道你这个表中有多少行,因为你要设置数组的个数

 public string[] getCarNo()
        {

            int arrayno = getDataNum("CarIn");//获取行数
string[] Carray = new string[arrayno]; str = "select CarNo from CarIn "; Conn.Open(); SqlCommand datacommand = new SqlCommand(str, Conn); SqlDataReader reader = datacommand.ExecuteReader(); int i = 0; while (reader.Read()) { Carray[i] = reader[0].ToString(); i++; } Conn.Close(); return Carray; }
原文地址:https://www.cnblogs.com/mamiyiya777/p/5856090.html