C#编程基础SqlCommand类的作用以及常用方法

        当使用SqlConnection类的Open方法成功连接数据库后,需要使用SqlCommand执行SQL查询数据库操作,一般操作完数据库,建议调用SqlConnection类的Colse方法关闭数据库。

        在C#的数据库操作过程中,SqlCommand类一般用于Sqlserver数据库的SQL语句的执行,包括Select语句、Update语句、Delete语句以及SQL存储过程等。

一、SqlCommand类常用属性

        CommandText:获取或设置要对数据源执行的 Transact-SQL 语句、表名或存储过程。

        CommandTimeout: 获取或设置在终止执行命令的尝试并生成错误之前的等待时间。 

        CommandType:获取或设置一个值,该值指示释 CommandText 是SQL语句,存储过程还是表操作。

        Connection:获取或设置 SqlCommand 的此实例使用的 SqlConnection。

        Parameters:获取 SqlParameterCollection参数集合。

        Transaction :获取或设置将在其中执行 SqlCommand 的数据库事务对象 SqlTransaction。

二、SqlCommand类常用方法

        ExecuteNonQuery()方法:返回影响的行数,主要用于增删改操作。

        ExecuteScalar()方法 :返回第一行第一列,例如我们在计算总条数的时候会使用到此方法。

        ExecuteReader()方法:创建一个SqlDataReader用于读取数据,用于查询数据。

        ExecuteXmlReader()方法:返回System.XmlReader实例,用于读取SQLServer中的XML字段的值

 

三、SqlCommand类实战---创建SqlCommand对象

        建立一个WEB窗体,添加一个Button按钮(ID名称为Button1),再添加一个TextBox文本框(ID名称为TextBox1),点击按钮如果打开成功,TextBox1文本框上显示出数据库已打开,否则TextBox1文本框上显示打开失败。

        数据库创建成功后,创建一个SqlCommand对象sqlcommand,并设置出错时等待时间为2秒。完整的代码为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;

namespace WebApplication32
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string sqlstr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
            MySqlConnection con = new MySqlConnection(sqlstr);//创建一个SqlConnection对象
            try       //将可能出错的语句放在try语句里
            {
                con.Open();
                //Response.Write("打开数据库成功!");
                TextBox1.Text = "打开数据库成功!";
                string sqlcommandStr = "select * from Brand";//创建统计语句
                MySqlCommand sqlcommand = new MySqlCommand(sqlcommandStr, con);//创建Command对象
                sqlcommand.CommandTimeout = 2;//设置等待时间
                Response.Write("创建Command成功");
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
                TextBox1.Text = "打开数据库失败!";
            }
            finally
            {
                con.Close();//关闭数据库连接
            }
        }

    }
}

 

 

运行结果:

鼠标点Button按钮

 

 

四、SqlCommand类实战---ExecuteNonQuery()方法

        这个方法没有返回任何结果,一般用于updata,delete,insert等SQL语句,执行完ExecuteNonQuery()方法后,返回受影响的行数。

        例:通过ExecuteNonQuery方法修改CarSYS数据库中的Brand数据表中BrandId为1的用户的名称

 

     从上图可以观察到CarSYS数据库中的Brand数据表中BrandId为1的用户的名称为HongQi。下面的代码将CarSYS数据库中的Brand数据表中BrandId为1的用户的名称由HongQi修改为HongQi_2020

string sqlcommandStr = "update Brand set BrandName = 'HongQi_2020' where BrandId = 1";//创建修改SQL语句

        建立一个WEB窗体,添加一个Button按钮(ID名称为Button1),再添加一个TextBox文本框(ID名称为TextBox1),点击按钮如果打开成功,TextBox1文本框上显示出数据库已打开,否则TextBox1文本框上显示打开失败。 

              完整的代码为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using System.Data;

namespace WebApplication32
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string sqlstr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
            MySqlConnection con = new MySqlConnection(sqlstr);//创建一个SqlConnection对象
            try       //将可能出错的语句放在try语句里
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                    TextBox1.Text = "打开数据库成功!";
                }
                string sqlcommandStr = "update Brand set BrandName = 'HongQi_2020' where BrandId = 1";//创建修改SQL语句
                MySqlCommand sqlcommand = new MySqlCommand(sqlcommandStr, con);//创建Command对象
                //执行SQL语句并返回受影响的行数
                int number = sqlcommand.ExecuteNonQuery();
                string message = number > 0 ? "修改信息成功!" : "修改信息失败!";
                Response.Write(message);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            finally
            {
                con.Close();//关闭数据库连接
            }
        }

    }
}

总之,如果受影响的行数>0,就表示更新成功。

 

 

 

五、SqlCommand类实战---ExecuteScalar()方法

        使用ExecuteScalar方法()方法可以以标量值的形式返回结果集中第一行第一列的值。例如:下面使用COUNT(*)聚合函数

来返回数据库中的总记录条数。

 

 

 

        

        建立一个WEB窗体,添加一个Button按钮(ID名称为Button1),再添加一个TextBox文本框(ID名称为TextBox1),点击按钮如果打开成功,TextBox1文本框上显示出数据库已打开,否则TextBox1文本框上显示打开失败。  

 

完整的代码为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using System.Data;

namespace WebApplication32
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string sqlstr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
            MySqlConnection con = new MySqlConnection(sqlstr);//创建一个SqlConnection对象
            try       //将可能出错的语句放在try语句里
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                    TextBox1.Text = "打开数据库成功!";
                }
                string sqlcommandStr = "select COUNT(*) from Brand";//创建统计语句
                MySqlCommand sqlcommand = new MySqlCommand(sqlcommandStr, con);//创建Command对象
                sqlcommand.Connection = con;
                int sum = Convert.ToInt32(sqlcommand.ExecuteScalar());
                string message = string.Format("Brand表中共有{0}条记录", sum);
                Response.Write(message);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            finally
            {
                con.Close();//关闭数据库连接
            }
        }

    }
}

运行结果如下:

 

六、SqlCommand类实战---ExecuteReader()方法

 

        我们已经知道,使用SqlCommand的ExecuteNonQuery()方法执行SQL语句可以返回受影响的行数,使用SqlCommand的

ExecuteScalar()方法从数据库中检索单个值,那么要想从数据库中读取多条记录怎么办呢? 可以使用SqlCommand对象的ExecuteReader()方法,这个方法返回一个SqlDataReader对象,通过这个SqlDataReader对象程序就可以从数据库中读取多条记录了。

        使用SqlDataReader对象可以从数据库中检索只读数据,其每次从查询结果中读取一行到内存中。使用SqlDataReader读取数据时,不能够对其进行修改,因为它是只读的。而且在读取数据时,要始终保持与数据库的连接。

        SqlDataReader对象中的Read()方法将读取器前进到结果集中的下一个记录。

        使用SqlDataReader的步骤如下:

                第一步:创建SqlCommand对象

                第二步:调用SqlCommand对象的ExecuteReader()方法创建SqlDataReader对象。

                            假如已经有了一个名为sqlcommand的SqlCommand对象,可以这样创建一个SqlDataReader对象

MySqlDataReader reader = sqlcommand.ExecuteReader();

                第三步:使用SqlDataReader对象的Read()方法逐行读取数据。

                              这个方法返回一个布尔值,如果能读取下一行,返回True,否则返回False。

                第四步:读取当前行的某列数据。

                              可以像使用数组一样,用方括号来读取某列的值,如果(type)dataReader[]

     使用SqlDataReader对象读取数据库时会占用数据库连接,必须调用Close()方法关闭SqlDataReader,才能用数据库连接进行其它操作。

 

        下面的代码查询CarSYS数据库中的Brand数据表中的BrandId字段<100 的所有记录。

        建立一个WEB窗体,添加一个Button按钮(ID名称为Button1),再添加一个TextBox文本框(ID名称为TextBox1),点击按钮如果打开成功,TextBox1文本框上显示出数据库已打开,否则TextBox1文本框上显示打开失败。 

        完整的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;

namespace WebApplication32
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string sqlstr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
            MySqlConnection con = new MySqlConnection(sqlstr);//创建一个SqlConnection对象
            try       //将可能出错的语句放在try语句里
            {
                con.Open();
                TextBox1.Text = "打开数据库成功!";
                string sqlcommandStr = "select * from Brand where BrandId < 100";//创建统计语句
                MySqlCommand sqlcommand = new MySqlCommand(sqlcommandStr, con);//创建Command对象
                sqlcommand.Connection = con;
                MySqlDataReader reader = sqlcommand.ExecuteReader();//ExecuteReader返回的对象类型是SqlDataReader
                {
                    //Read是bool类型,初始指针指向第一条数据之前,每调用一次reader,指针就下移一条,只要没有移到最后一条之后,就返回true。
                    while (reader.Read())
                    {
                        int t = (int)reader.GetUInt32(0);//GetString(1)得到表中第一列的值,用name接收,因为查的是*,所以就和表中的列数一样。
                        string name = reader.GetString(1);
                        Response.Write("Brand数据表中的数为:" + t.ToString() + "-" +   name);
                    }
                    reader.Close();
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            finally
            {
                con.Close();//关闭数据库连接
            }
        }

    }
}

 

 

程序运行前数据库内容如下:

运行结果:

 

说明:使用ExecuteReader()方法读出的数据,可以通过 MySqlDataReader.Read()方法一行一行的读,每调用一次reader,指针就下移一条,只要没有移到最后一条之后,就返回true。当移到最后一条,就返回false.

 

七、总结

        ExecuteNonQuery用于执行不返回任何记录的SQL语句或存储过程。在数据库执行如更新、插入、删除操作时,应使用这个方法。ExecuteNonQuery返回一个整数值,用来说明受查询语句影响的行数。

        ExecuteScalar与ExecuteNonQuery一样,其返回的也是单值,但该返回值是从数据库中读出来的,而不是受影响的行数。它通常用于选择一个值的SQL语句。如果SELECT返回多行或多列,则使用该方法仅返回第一行第一列的数据。 

        ExecuteReader被用于返回多条记录的SELECT语句(包含任意个字段)。ExecuteReader将返回一个包含查询结果的SqlDataReader对象。一个SqlDataReader对象是以顺序向前且只读的形式逐个读取并返回结果的。SqlDataReader是数据库中读取数据最快的对象,但必须打开连接。通过SqlDataReader取回所有的记录,并把它们存入DataTable对象中(它可以存储离线数据而不需要一个打开的连接),这样就可以马上关闭数据库连接了。DataTable类可以存放本地的结果集而不需要一个打开的SQL Server连接,和其它的ADO.NET对象一样,它也不是特定于某种数据提供程序的。

 

八、SqlCommand总结

        用SqlConnection类打开数据库成功后,就需要用SqlCommand类对数据库执行增加、删除、修改、查询的工作。

        要使用SqlCommand对象,必须要先定义一个可用的SqlConnection对象,使用SqlCommand对象的步骤如下:

        第一步:用SqlConnection对象创建数据库的连接。

   string sqlstr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
    MySqlConnection con = new MySqlConnection(sqlstr);//创建一个SqlConnection对象
    con.Open();

        第二步:定义执行的SQL语句。

                       例如:

string sqlcommandStr = "select * from Brand where BrandId < 100";

         第三步:创建SqlCommand对象

                       使用已有的SqlConnection对象和SQL语句字符串创建一个SqlCommand对象。

                       例如:

    string sqlstr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
    MySqlConnection con = new MySqlConnection(sqlstr);//创建一个SqlConnection对象
    con.Open();
    string sqlcommandStr = "select * from Brand where BrandId < 100";//创建SQL统计语句
    MySqlCommand sqlcommand = new MySqlCommand(sqlcommandStr, con);//创建Command对象
    sqlcommand.Connection = con;

           第四步:执行SQL语句。

                        这里需要使用SqlCommand对象的某个方法(ExecuteNonQuery()方法、ExecuteScalar()方法或ExecuteReader()方法)来执行命令。

                       例如:

MySqlDataReader reader = sqlcommand.ExecuteReader();//ExecuteReader返回的对象类型是SqlDataReader

https://www.cnblogs.com/zzj-suxiao/articles/3934805.html

https://www.cnblogs.com/xu-yi/p/11186536.html

 

学习笔记(一)ADO.Net中Sqlconnection与Sqlcommand的应用

https://blog.csdn.net/Excellent_2333/article/details/88368667?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-14.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-14.nonecase

 

 

 

          

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值