1. SQL Server驱动简介
SQL Server是由Microsoft公司发布的一个关系型数据库管理系统,其提供了以Transact-SQL为基础的数据管理和数据访问技术。而SQLServer驱动则是数据库与.NET应用程序之间的桥梁,它可以使.NET应用程序能够与SQL Server进行数据交换,并提供了一系列的命名空间和类,以便访问SQL Server数据库的各种对象,如表、视图、存储过程等等。
using System.Data.SqlClient;
在.NET下与SQL Server进行数据交互主要使用的就是SQL Server驱动,而要使用SQL Server驱动,则需要在.NET应用程序中添加对System.Data.SqlClient命名空间的引用,其命名空间中包含了许多用于与SQL Server进行交互的类。
2. SQL Server连接字符串
要连接到SQL Server数据库,需要使用连接字符串。连接字符串是包含与数据源的连接属性的字符串,可以通过配置文件或代码进行设置。SQL Server连接字符串一般格式如下:
Data Source=服务器地址;Initial Catalog=数据库名称;User ID=用户名;Password=密码;
其中,Data Source指定SQL Server的服务器名称或IP地址;Initial Catalog指定要连接的数据库名称;User ID指定登录SQL Server的用户名;Password指定登录SQL Server的密码。
在.NET应用程序中,可以使用 SqlConnectionStringBuilder 类来创建和解析连接字符串。例如:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "localhost";
builder.InitialCatalog = "TestDB";
builder.UserID = "sa";
builder.Password = "123456";
string connectionString = builder.ConnectionString;
上面代码中,我们创建了一个 SqlConnectionStringBuilder 对象 builder ,然后设置它的连接属性,最后获得了连接字符串。
3. 创建SqlConnection对象
要连接到SQL Server数据库,需要创建一个 SqlConnection 对象。SqlConnection类是.NET Framework提供的用于与SQL Server进行数据交互的核心类,它实现了 IDisposable 接口,可以进行资源释放。
使用 SqlConnection 类的一个示例:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// do something...
connection.Close();
}
上面代码中,我们创建了一个名为 connection 的 SqlConnection 对象,并在 using 块中使用它。在进入 using 块时,连接会自动打开;在块结束时,连接会自动关闭。
4. 使用SqlCommand对象执行SQL语句
使用 SqlCommand 类来执行SQL语句或存储过程。SqlCommand也是.NET Framework提供的核心类之一,它封装了与SQL Server进行通信的各种方法和属性。
SqlCommand类需要一个SQL语句并与SqlConnection对象配合使用。在执行SQL语句之前,先要将SQL语句赋值给SqlCommand对象:
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "SELECT * FROM Customers"
上面代码中,我们创建了一个 SqlCommand 对象 command ,并设置它的 Connection 属性为我们前面创建的 SqlConnection 对象 connection,然后将需要执行的SQL字符串设置给 CommandText 属性。
然后,我们可以使用 SqlCommand 对象来执行查询操作,并将结果存储在 SqlDataReader 对象中,接着遍历 SqlDataReader 对象来获取结果。
using(SqlDataReader reader = command.ExecuteReader())
{
while(reader.Read())
{
//...
}
}
需要注意的是,当执行完查询操作后,必须关闭该 SqlDataReader 对象和 SqlConnection 对象。
5. 使用SqlDataAdapter对象填充DataSet
DataSet 是一种用于在.NET应用程序中存储和操作数据的一种独立于数据源的数据结构。使用 SqlDataAdapter 类,可填充数据集 DataSet,还可以从数据集更新数据库。
示例代码如下:
SqlCommand command = new SqlCommand("SELECT * FROM Customers", connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet dataSet = new DataSet("Customers");
adapter.Fill(dataSet, "Customers");
DataTable table = dataSet.Tables["Customers"];
foreach(DataRow row in table.Rows)
{
//...
}
上面代码中,我们首先创建了一个 SqlCommand 对象,然后将该对象传递给 SqlDataAdapter 构造函数,接着创建一个 DataSet 对象,并将其命名为“Customers”,最后,使用 Fill 方法将该命令的结果填充到该数据集的 Customers 表中,并在 DataSet 对象中访问该表。
6. 使用SqlParameter对象传递参数
SqlParameter 类代表 SQL 语句中的参数。使用参数可以增加查询的安全性,同时也能够增加性能(重复查询的参数化效果非常的明显)。
例如:
string lastName = "Gates";
SqlCommand command = new SqlCommand("SELECT * FROM Customers WHERE LastName=@lastName", connection);
command.Parameters.AddWithValue("@lastName", lastName);
在这个例子中,我们通过 @lastName 形式的参数实现了一个动态查询。参数的值是在运行时设置的,同时SqlParameter对象具有向SQL Server传递参数的功能。
7. 使用Transaction对象执行事务
事务是对数据库操作进行的批处理。在事务中,如果一个操作失败,则事务可以回滚,随后的操作也不会执行。如果所有的操作都成功,则事务可以提交,所有的操作则生效。
例如:
SqlTransaction transaction = connection.BeginTransaction();
try
{
SqlCommand command1 = new SqlCommand("INSERT INTO Customers (FirstName, LastName) VALUES('Tom', 'Smith')", connection, transaction);
command1.ExecuteNonQuery();
SqlCommand command2 = new SqlCommand("UPDATE Customer SET Balance=@newBalance WHERE CustomerID=@customerID", connection, transaction);
command2.Parameters.AddWithValue("@newBalance", 1000);
command2.Parameters.AddWithValue("@customerID", 1);
command2.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
上面代码中,我们首先创建了一个 SqlTransaction 对象 transaction,通过 connection.BeginTransaction() 方法在连接数据库中开始一个事务,然后我们创建两个 SqlCommand 对象 command1 和 command2,并将其与该事务相关联。随后,我们在执行完这两个命令之后提交该事务。如果有任何一个命令执行失败,则回滚该事务并抛出异常。
8. 总结
在.NET平台下,连接SQL Server数据库需要使用 SQL Server驱动。使用SqlConnection连接对象,SqlCommand进行SQL语句的执行,参数化查询,以及处理存储过程,SqlDataAdapter对象用于填充数据集 DataSet,SqlParameter对象用于防止 SQL 注入,SqlTransaction对象用于管理与SQL Server的事务处理等。