(转)ExecuteNonQuery(),ExecuteDataSet() ,ExecuteReader() ,ExecuteScalar(),DataTable() 用法

一、ExecuteNonQuery方法 :执行非查询SQL操作,包括增insert、删delete、改update;ExecuteNonQuery()方法执行SQL语句并且不返回数据。

  1. public static int ExecuteNonQuery(string strSql, SqlParameter[] parameter)
  2. {
  3. SqlConnection sqlConn = new SqlConnection(strConn);
  4. SqlCommand sqlCmd = new SqlCommand(strSql, sqlConn);
  5. if (parameter != null)
  6. {
  7. sqlCmd.Parameters.AddRange(parameter);
  8. }
  9. sqlConn.Open();
  10. int objResult = sqlCmd.ExecuteNonQuery();
  11. sqlConn.Close();
  12. return objResult;
  13. }

 

 二、ExecuteDataset会运行你的基本SELECT(选择)查询并生成一个DaclosetaSet,然后就能够被绑定到服务器对象上,或者被用来创建DataView(数据视图)。

  1. public static DataSet ExecuteDataSet(string strSql, SqlParameter[] parameter)
  2. {
  3. SqlConnection sqlConn = new SqlConnection(strConn);
  4. SqlCommand sqlCmd = new SqlCommand(strSql, sqlConn);
  5. SqlDataAdapter sqlAdp = new SqlDataAdapter(sqlCmd);
  6.  
  7. DataSet ds = new DataSet();
  8. sqlAdp.Fill(ds);
  9. return ds;
  10. }
  11. <span style="font-size:12px;"></span>

三、ExecuteReader主要是用于查询语句(SELECT),它是为了提高运行性能而设置的。SqlDataReaders很类似于经典 ADO里的只能向前的只读记录集(即类似ASP中的movenext),它们对于填充ListBoxe控件和CheckBoxList控件很有用处。对ExecuteReader的调用看起来就像是一个ExecuteDataset。要记住,它需要命名空间为System.Data.SqlClient:

所以以后如果SQL语句中,只要是查找单条的数据中的某个字段或全部字段时,如select  top  1  *  from XX  where id=xx;用DataSet (即ExecuteDataSet  ),但是如果说满足id=xx的结果有很多个数据,此时用ExecuteReader,因为它能够查询出“只读的向前的数据流”(如ASP中的movenext 一样,明白了吧,哈哈),如果此时用ExecuteDataSet就错了,更何况ExecuteReader读取数据的效率会比ExecuteDataSet高。

  1. public static SqlDataReader ExecuteReader(string strSql, CommandType commandType = CommandType.Text)
  2. {
  3. SqlConnection myConn = new SqlConnection(strSqlConnection);
  4. SqlCommand SqlCmd = new SqlCommand(strSql, myConn);
  5. SqlCmd.CommandType = commandType;
  6. SqlDataReader sdr = null;
  7. try
  8. {
  9. myConn.Open();
  10. sdr = SqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
  11. }
  12. catch (Exception ex)
  13. {
  14.  
  15. }
  16. return sdr;
  17.  
  18. }


四、对于使用ExecuteScalar(),ExecuteScalar()方法执行SQl查询,并返回查询结果集中的第一行的第一列,忽略额外的列或行!虽然返回的值的数据类型可以是string,int。。。但msdn.com微软上说:

使用 ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。所以我习惯在count(字段)才用ExecuteScalar,如:

 public int SelClass(decimal id) //添加类别
        {
            string commText = string.Format("select Count(id) as [Count] from FAQ_List where ClassID like '{0}%'", id);
            return Convert.ToInt32(db.ExecuteScalar(CommandType.Text, commText));
        }

 

  1. public static object ExecuteScalar(string strSql, CommandType commandType = CommandType.Text)
  2. {
  3. SqlConnection myConn = new SqlConnection(strSqlConnection);
  4. SqlCommand SqlCmd = new SqlCommand(strSql, myConn);
  5. SqlCmd.CommandType = commandType;
  6. object objResult = null;
  7. try
  8. {
  9. myConn.Open();
  10. objResult=SqlCmd.ExecuteScalar();
  11. }
  12. catch(Exception ex)
  13. {
  14.  
  15. }
  16. finally
  17. {
  18. myConn.Close();
  19. }
  20. return objResult;


 五、DataTable 与dataset十分相似;可以把DataTable和DataSet看做是数据容器,比如你查询数据库后得到一些结果,可以放到这种容器里,那你可能要问:我不用这种容器,自己读到变量或数组里也一样可以存起来啊,为什么用容器?

原因是,这种容器的功能比较强大,除了可以存数据,还可以有更大用途。举例:在一个c/s结构的桌面数据库系统里,你可以把前面存放查询结果的容器里的数据显示到你客户端界面上,用户在界面上对数据进行添加、删除、修改,你可以把用户的操作更新到容器,等用户操作完毕了,要求更新,然后你才把容器整个的数据变化更新到中心数据库,这样做的好处是什么?就是减少了数据库操作,客户端速度提高了,数据库压力减小了。
DataSet可以比作一个内存中的数据库,DataTable是一个内存中的数据表,DataSet里可以存储多个DataTable

    1. public DataTable reDt(string cmdstr) //执行sql查询
    2. {
    3. SqlConnection con =GetCon();
    4. SqlDataAdapter da = new SqlDataAdapter(cmdstr, con);
    5. DataSet ds = new DataSet();
    6. da.Fill(ds);
    7. return (ds.Tables[0]);
    8. }
posted @ 2018-07-31 11:21  DKGUO  阅读(750)  评论(0)    收藏  举报