
ADO.Net之SqlConnection、 Sqlcommand的应用
SqlConnection 的介绍与应用
1、介绍与作用
SqlConnection是ADO.NET中的连接类。
使用sqlconnection 类可以连接到SQL Server数据库。
2、主要属性以及方法
主要属性:ConnectionString(连接字符串)
其它属性简介:
属性 |
说明 |
ClientConnectionId |
最近连接尝试连接的 ID,无论该尝试是成功还是失败。 |
ConnectionTimeout |
获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。 (重写 DbConnectionConnectionTimeout。) |
Container |
获取 IContainer,它包含 Component。 (继承自 Component。) |
Credential |
获取或设置此连接的 SqlCredential 对象。 |
Database |
获取当前数据库或连接打开后要使用的数据库的名称。 (重写 DbConnectionDatabase。) |
DataSource |
获取要连接的 SQL Server 实例的名称。 (重写 DbConnectionDataSource。) |
FireInfoMessageEventOnUserErrors |
获取或设置 FireInfoMessageEventOnUserErrors 属性。 |
PacketSize |
用来与 SQL Server 的实例进行通信的网络数据包的大小,以字节为单位。 |
ServerVersion |
获取包含客户端连接的 SQL Server 实例的版本的字符串。 (重写 DbConnectionServerVersion。) |
Site |
获取或设置Component 的 ISite。 |
State |
指示最近在连接上执行网络操作时, SqlConnection 的状态。 (重写 DbConnectionState。) |
StatisticsEnabled |
如果设置为 true,则对当前连接启用统计信息收集。 |
WorkstationId |
获取标识数据库客户端的一个字符串。 |
方法:Open();(打开数据库) Close();(关闭数据库)
构造函数:
名称 |
说明 |
SqlConnection |
初始化 SqlConnection 类的新实例。 |
SqlConnection(String) |
如果给定包含连接字符串的字符串,则初始化 SqlConnection 类的新实例。 |
SqlConnection(String, SqlCredential) |
初始化给定连接字符串的 SqlConnection 类的新实例,而不使用包含用户识别号和密码的 Integrated Security = true 和 SqlCredential 对象。 |
3、创建SqlConnection对象:
可以使用定义好的连接字符串创建SqlConnection对象。代码如下
SqlConnection connection=new SqlConnection(connectionString);
要访问数据源,必须先建立连接。这个连接对象里描述了数据库服务器类型、数据库的名字、用户名、密码等参数。
SqlConnection conn=new SqlConnection();
conn.ConnectionString=”Data Source=(Local);
Initial Catalog=pubs; uid=sa; pwd=sa;”
调用SqlConnection 对象的Open()与Close() 方法来打开和关闭数据库的代码如下:
打开数据库:connection.Open();
关闭数据库:connection.Close();
SqlCommand的介绍与应用
SqlCommand属于命令类
1、作用:
SqlCommand 对象用于执行具体的SQL语句,如增加、删除、修改、查找。
2、主要属性以及方法
SqlCommand对象的常用属性
属 性 |
说 明 |
Connection属性 |
指定Command对象所使用的Connection对象。 |
CommandType属性 |
指定Command对象的类型,有3种选择: 1 Text:表示Command对象用于执行SQL语句。 2 StoredProcedure:表示Command对象用于执行存储过程。 3 TableDirect:表示Command对象用于直接处理某个表。 CommandType属性的默认值为Text。 |
CommandText属性 |
根据CommandType属性的取值来决定CommandText属性的取值,分为3种情况: 1 如果CommandType属性取值为Text,则CommandText属性指出SQL语句的内容。 2 如果CommandType属性取值为StoredProcedure,则CommandText属性指出存储过程的名称。 3 如果CommandType属性取值为TableDirect,则CommandText属性指出表的名称。 CommandText属性的默认值为SQL语句。 |
CommandTimeout属性 |
指定Command对象用于执行命令的最长延迟时间,以秒为单位,如果在指定时间内仍不能开始执行命令,则返回失败信息。 默认值为30秒。 |
Parameters属性 |
指定一个参数集合。 |
SqlCommand对象的重要方法:
方法 |
说明 |
ExecuteScalar |
执行查询,并返回查询结果中的第一行第一列的值,类型是object |
ExecuteNonQuery |
执行SQL语句并返回受影响的行数 |
ExecuteReader |
执行查询命令,返回SqlDataReader对象 |
3、SqlCommand对象的使用步骤如下
(1)创建SqlConnection对象
SqlConnection connection=new SqlConnection(connectionString);
(2)定义SQL语句
把所要执行的SQL语句赋给字符串。
(3)创建SqlCommand对象
SqlCommand command = new SqlCommand();
(4)调用SqlCommand对象的某个方法,执行SQL语句。
注意:在调用SqlCommand 对象的某个方法之前,一定要打开数据库连接,否则程序会出错。
举例如下:
private void btn_SignUp_Click(object sender, EventArgs e)
{
if (this.txb_UserNo.Text.Trim() == "") //若用户号文本框为空;
{
MessageBox.Show("用户号不能为空!"); //给出错误提示;
this.txb_UserNo.Focus(); //用户号文本框获得焦点;
return; //返回;
}
if (this.txb_Password.Text.Trim() == "") //若密码文本框为空;
{
MessageBox.Show("密码不能为空!"); //给出错误提示;
this.txb_Password.Focus(); //密码文本框获得焦点;
return; //返回;
}
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=EduBaseDemo;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = sqlConnection.CreateCommand(); //调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;
sqlCommand.CommandText =
"INSERT tb_User (No,Password) VALUES(@No,HASHBYTES('MD5',@Password));"; //指定SQL命令的命令文本;命令文本包含参数;
sqlCommand.Parameters.AddWithValue("@No", this.txb_UserNo.Text.Trim()); //向SQL命令的参数集合添加参数的名称、值;
sqlCommand.Parameters.AddWithValue("@Password", this.txb_Password.Text.Trim());
sqlCommand.Parameters["@Password"].SqlDbType = SqlDbType.VarChar; //将密码参数的类型设为变长字符串;
//SQL参数自动识别类型;若参数值为字符串,则类型自动设为NVARCHAR,且可在执行时自动转换;但对于相同密码,VARCHAR/NVARCHAR类型所获得的散列值不同,故需手动将SQL参数类型统一设为VARCHAR;
int rowAffected = 0; //声明整型变量,用于保存受影响行数;
string message = ""; //声明字符串变量,用于保存消息;
try //尝试;
{
sqlConnection.Open(); //打开SQL连接;
rowAffected = sqlCommand.ExecuteNonQuery(); //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;
}
catch (SqlException sqlEx) //捕捉SQL异常;
{
if (sqlEx.Number == 2627) //若SQL异常编号为2627,则违反主键/唯一约束,即插入重复值;
{
message = "您注册的用户号已存在,请重新输入!"; //给出合适的错误提示;
}
else //否则;
{
message = "注册失败!"; //给出一般错误提示;
}
}
finally //结束;
{
sqlConnection.Close(); //关闭SQL连接;
}
if (rowAffected == 1) //若成功写入1行记录;
{
message = "注册成功。"; //给出正确提示;
}
MessageBox.Show(message); //显示提示;
}