引言
对于.NET的其中一个数据提供者:SQL Server .NET提供者有 Connection 对象、 Command 对 象、 DataAdapter 对象及 DataReader 对象。
接下来介绍ADO.Net中SqlConnection、Sqlcommand的应用
(一)SqlConnection
1.介绍
使用sqlconnection 类可以连接到SQL Server数据库,有一下两种方法:
(1) 通过VS创建SqlConnection对象
A.在任意选项卡上单击鼠标右键,在弹出的快捷菜单中, 选择“选择项”命令,手动加入Connection对象。
B.等待一段时间后,出现 “选择工具箱项” 对话框,从中找到SqlConnection对象,勾选后单击“确定”按钮 。
C.这样就可以在工具箱中看到SqlConnection控件 。
D.在窗体设计器中,拖曳一个SqlConnection控件 。
E.在“属性”窗口中,把对象的Name属性值改为cnSql,并选择属性ConnectionString 。
(2)通过编程创建SqlConnection对象
A.首先, 利用 SqlConnection 类的构造函数 SqlConnection()创建一个未初始化的 SqlConnection 对 象 , 再 用 一 个 连 接 字 符 串 初 始 化 该 对 象 :
SqlConnection cnSql=newSqlConnection();
//需要注意的是在使用 cnSql 之前必须再设置 ConnectionString属性的值
cnSql.ConnectionString="server=(local);database=EMR1;uid=XuTingTing;pwd=123456abc;"
//要访问数据源,必须先建立连接。这个连接对象里描述了数据库服务器类型、数据库的名字、用户名、密码等参数。
B. 利用 SqlConnection 类的构造函数 SqlConnection(stringconnectionString)创 建一个 SqlConnection 对象, 并为该构造函数的参数指定一个连接字符串。
SqlConnection cnSql=newSqlConnection("server=(local);database=EMR1;uid=XuTingTing;pwd=12346abc;");
2.SqlConnection对象的主要属性:ConnectionString属性
参数 |
描述 |
Integrated Secunity |
如果此参数为false,则必须指定其中的Password和UserID,则数据源使用当前身份验证Microsoft windows账户凭证。其可识别值为true、false、no以及sspi(等价于true)。 |
ConnectionString |
获取或者设置用于打开数据库的连接字符串。 |
ConnectionTimeout |
在试图建立连接的过程中, 获取在终止操 作并产生错误之前等待的时间, 也就是超时时间。 |
DataBase |
取得或设置在数据库服务器上要打开的数据库名。 |
DataSource |
数据库所处的位置包括它的文件 |
PassWord |
如果integrated secunity设置为false,则该参数为要使用的数据源登录账户密码。 |
State |
取得目前连接的状态。 |
UserID |
如果integrated secunity设置为false,则该参数为要使用的数据源登录账户密码。 |
3.SqlConnection对象的方法:
Open方法 |
创建一个 SqlConnection 对象并指定一个连接字符串并没有打开一个指向数据库的物理连接, 需要调用对象的 Open 方法来打开连接。用 Open 方法打开的连接。 |
Close方法 |
Close 方法来关闭 SqlConnection 对象, 不关闭打开的连接会影 响系统性能和对应用程序的操作, 所以最好关闭连接。 |
例:测试连接状态
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection();//创建sqlConnection对象
sqlConnection.ConnectionString = "Server=(local);DataBase=EMR1;Integrated Security=sspi";
sqlConnection.Open();//打开数据库
MessageBox.Show(sqlConnection.State.ToString());
sqlConnection.Close();//关闭数据库
MessageBox.Show(sqlConnection.State.ToString());
}
}
}
(二)SqlCommand
1.介绍
SqlCommand 对象用于执行具体的SQL语句,如增删改查。
2. 创建SqlCommand对象有以下两种方法:
(1)通过VS创建SqlCommand对象
与上述使用VS创建SqlConnection对象类似。
(2)通过编程方式创建SqlCommand对象
A.使用无参数的构造函数来创建Connection对象的新实例,然后设置适当的属性值 。
SqlCommand com=new SqlCommand( );
com.Connection=cn;
B.使用带参数的构造函数, 并指定查询字符串和Connection对象。
SqlCommand com=new SqlCommand(命令文本,cn);
C.调用Connection对象的CreateCommand()方法 。
SqlCommand com=cn.CreateCommand( );
3.SqlConnection对象的主要属性
属性 |
描述 |
CommandText |
要对数据源执行的SQL语句或存储过程 |
CommandTimeout |
在终止执行命令的尝试并生成错误提示信息之前等待时间(单位:s) |
CommandType |
指示如何解释CommandText属性,默认值是Text |
Connection |
Command对象所要使用的Connection |
Parameters |
Parameters集合 |
Transcation |
执行命令所在事务 |
UpdataRowSource |
确定当Command对象被DataAdapter或TableAdapter的Update()方法使用时,其结果如何应用于DataRow |
补充:
其中CommandType属性用来指示如何解释CommandText属性的内容 。其取值及描述如下表所示。
属性值 |
描述 |
StoredProcedure |
指示CommandText属性所包含的是要执行的存储过程的名称 |
TableDirect |
指示CommandText属性所包含的是要访问的一个表的名称,从此表中将取出所有的列和行 |
Text |
指示CommandText属性包含的是要执行的SQL命令(此为默认值) |
4.使用SqlCommand对象来执行 SQL 语句(SqlCommand的主要方法)
方法 |
说明 |
ExecuteScalar |
执行查询,并返回查询结果中的第一行第一列的值,类型是object |
ExecuteNonQuery |
执行查询,并返回查询结果中的第一行第一列的值,类型是object |
ExecuteReader |
执行查询命令,返回SqlDataReader对象 |
5.区别
DataReader对象:根据Command对象的查询结果, 按顺序获取单行数据。
6.SqlCommand对象的使用步骤如下
(1)创建SqlConnection对象
(2)定义SQL语句把所要执行的SQL语句赋给字符串。
(3)创建SqlCommand对象
(4)调用SqlCommand对象的某个方法,执行SQL语句。
例:用户登录
using System;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Configuration;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_Connect_Click(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection();//创建sqlConnection对象
sqlConnection.ConnectionString = "Server=(local);DataBase=EMR1;Integrated Security=sspi";//连接数据库
SqlCommand sqlCommand = new SqlCommand();//创建sqlCommand对象
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = string.Format("SELECT COUNT(1) FROM Student WHERE No={'0'} AND Password={'1'},this.txb_UserNo.Text.Trim(),this.txb_Password.Text.Trim()");//调用CommandText方法执行sql语句
sqlConnection.Open();//打开数据库
int rowCount = (int)sqlCommand.ExecuteScalar();//定义一个rowCount值返回sql的执行结果
sqlConnection.Close();//关闭数据库
if (rowCount == 1)
{
MessageBox.Show("登陆成功");
}
else
{
MessageBox.Show("用户账号/密码错误,请重新输入");
this.txb_Password.Focus();
}
}
}
}