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

您所在的位置:网站首页 图书分类的作用 C#编程基础SqlCommand类的作用以及常用方法

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

2023-11-01 17:22| 来源: 网络整理| 查看: 265

        当使用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字段


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3