zoukankan      html  css  js  c++  java
  • 关于Command的ExecuteNonQuery(),ExecuteScalar(),ExecuteReader方法的区别

      这篇文章暂不提如何显示数据库中的数据,只提出如何增加、删除、修改数据,关于如何显示数据,会在以后的文章中提出。

    一、定义OleDbCommand类型变量:MyCommand

      要对数据库进行增加、删除、修改的操作我们还需要根据MyConnectio的类型定义一个OleDbCommand或者SqlCommand对象(请注意如果MyConnection是OleDbConnection类型,那么只能用OleDbCommand;如果MyConnection是SqlConnection类型,那么那么只能用SqlCommand。这里假设MyConnection是OleDbConnection类)。

    方法一
      
    你可以象拖放MyConnection一样拖放一个OleDbCommand,并命名为 MyCommand。
    方法二
      
    在(关联文件).CS文件中protected System.Data.OleDb.OleDbConnection MyConnection;下面手动添加:
    protected System.Data.OleDb.OleDbCommand MyCommand;
    在private void InitializeComponent()中this.MyConnection =newSystem.Data.OleDb.OleDbConnection();的下一行下面手动添加:
    this.MyCommand = new System.Data.OleDb.OleDbCommand();
    即可完成对MyCommand的定义
    说明:MyCommand的作用是用来执行SQL命令
    二、利用定义的MyConnectio和MyCommand对数据库进行增加、删除、修改

      首先我们需要连接并打开一个数据库(关于数据库的连接和打开的操作请察看我们以前的文章)。打开数据库:MyConnectio.Open();
    然后我们需要给MyCommand指定要执行的SQL命令 :
    MyCommand.CommandText = "delete from admin";
    接着我们需要给MyCommand指定数据源(对那个数据库执行SQL命令):MyCommand.Connection = MyConnection;然后我们执行MyCommand命令即可: MyCommand. ExecuteNonQuery();如果我们在执行还有"delete from admin";
    后需要接着执行 “insert into admin (Admin_Code,Admin_Pwd) values(‘aa’,’bb’)”,则我们只要再次指定MyCommand指定要执行的SQL命令 : MyCommand.CommandText =“insert into admin (Admin_Code,Admin_Pwd) values(‘aa’,’bb’)”,然后执行MyCommand. ExecuteNonQuery();即可。(由于数据库未关闭,所以我们不需要也不可以再次MyConnectio.Open();,同理由于没有改变MyCommand的数据源所以我们也没有必要再次指定MyCommand.Connection = MyConnection;)

    下面我们将详细讲解如何在Page_Load()中对数据库的增加、删除、修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法
    1、 增加新的记录
    private void Page_Load(object sender, System.EventArgs e)
    {
    MyConnection.Open();’打开数据库
    MyCommand1.CommandText = "insert into admin values(‘aaddq‘,‘as‘,‘ss‘)";
    MyCommand1.Connection = MyConnection;
    MyCommand1.ExecuteNonQuery();’由于增加了一条记录,所以返回1
    //或者MyCommand1.ExecuteReader();先增加一条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
    //或者MyCommand1. ExecuteScalar();先增加一条记录,返回未实列化的对象
    MyConnection.Close();
    }

    2、 删除现有数据
    private void Page_Load(object sender, System.EventArgs e)
    {
    MyConnection.Open();’打开数据库
    MyCommand1.CommandText = "delete * from admin";
    MyCommand1.Connection = MyConnection;
    MyCommand1.ExecuteNonQuery();’由于删除了n条记录,所以返回n
    //或者MyCommand1.ExecuteReader();先删除n条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
    //或者MyCommand1. ExecuteScalar();先删除n条记录,返回未实列化的对象
    MyConnection.Close();
    }

    3、 修改现有数据
    private void Page_Load(object sender, System.EventArgs e)
    {
    MyConnection.Open();’打开数据库
    MyCommand1.CommandText = "update admin set admin_code=’212’,Admin_pwd=’43’ where admin_code=’23’";
    MyCommand1.Connection = MyConnection;
    MyCommand1.ExecuteNonQuery();’由于修改了1条记录,所以返回n
    //或者MyCommand1.ExecuteReader();先修改了1条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
    //或者MyCommand1. ExecuteScalar();先修改了1条记录,返回未实列化的对象
    MyConnection.Close();
    }


    三、关于MyCommand的ExecuteNonQuery(),ExecuteScalar(),ExecuteReader方法的区别:
    1、ExecuteNonQuery():执行SQL,返回一个整型变量,如果SQL是对数据库的记录进行操作,那么返回操作影响的记录条数,如果是SQL="CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)"那么在表创建成功后该方法返回 –1。
    例如:
    private void Page_Load(object sender, System.EventArgs e)
    {
    MyConnection.Open();’打开数据库
    MyCommand1.CommandText = "CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)"; MyCommand1.Connection = MyConnection;
    MyCommand1.ExecuteNonQuery();’首先建立一个LookupCodes表,然后返回-1
    //或者MyCommand1.ExecuteReader();首先建立一个LookupCodes表,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
    //或者MyCommand1. ExecuteScalar();首先建立一个LookupCodes表,返回未实列化的对象
    MyConnection.Close();
    }


    2、 ExecuteScalar():执行SQL,(如果SQL是查询Select)返回查询结果的第一行第一列,如果(如果SQL不是查询Select)那么返回未实列化的对象,因为对象未实列化,所以返回结果不能ToString(),不能Equals(null),也就是说返回结果没有任何作用

    3、 executeReader方法执行SQL,(如果SQL是查询Select)返回查询结果的集合,类型是System.Data.OleDb.OleDbDataReader,你可以通过此结果,获取查询的数据。如果(如果SQL不是查询Select)那么返回一个没有任何数据的System.Data.OleDb.OleDbDataReader类型的集合(EOF)


    四、总结:
    ASP.Net中对于数据库的操作方法很多,要实现统一个目标不同的人可能会采取不同的方法,就好像在ASP中有的人喜欢用RS.ADDNEW,有的人喜欢用”Insert Into”,主要是看个人的习惯,当然在性能上不同的方法可能会存在较大的差别,这个只能靠我们在平常的学习中一点一滴的积累经验的。另外顺便说一下ASP.Net页提供类似如下方式的操作方法:
    OleDbCommand2.Parameters("au_id").Value = TextBox1.Text
    OleDbCommand2.Parameters("au_lname").Value = TextBox2.Text
    OleDbCommand2.Parameters("au_fname").Value = TextBox3.Text
    OleDbCommand2.Parameters("phone").Value = TextBox4.Text
    OleDbCommand2.Parameters("address").Value = TextBox5.Text
    OleDbCommand2.Parameters("city").Value = TextBox6.Text
    OleDbCommand2.Parameters("st").Value = TextBox7.Text
    OleDbCommand2.Parameters("zip").Value = TextBox8.Text
    OleDbCommand2.Parameters("contract").Value = CheckBox1.Checked
    cmdresults = OleDbcommand2.ExecuteNonQuery()



     
    这三个方法是操作数据库的
    可偶一直搞不明白什么时候用哪条命令
    ENQ针对insert,update,delete 

    ExecuteNonQuery()
    ExecuteReader()
    ExecuteScalar()
    第一个针对Insert,update,delete 一般返回的是@@rowcount
    第二个针对Select
    第三个针对select count(*),sum什么的,只有一个结果的 


  • 相关阅读:
    hihocoder 1049 后序遍历
    hihocoder 1310 岛屿
    Leetcode 63. Unique Paths II
    Leetcode 62. Unique Paths
    Leetcode 70. Climbing Stairs
    poj 3544 Journey with Pigs
    Leetcode 338. Counting Bits
    Leetcode 136. Single Number
    Leetcode 342. Power of Four
    Leetcode 299. Bulls and Cows
  • 原文地址:https://www.cnblogs.com/gfwei/p/537398.html
Copyright © 2011-2022 走看看