应用程序一般需要对 SQL 数据库执行一个或多个选择、插入、更新或删除查询。下表显示上述每个查询的示例。
查询 示例
简单选择 SELECT * from Employees WHERE FirstName = 'Bradley';
联接选择 SELECT * from Employees E, Managers M WHERE E.FirstName = M.FirstName;
插入 INSERT into Employees VALUES ('123-45-6789','Bradley','Millington','Program Manager');
更新 UPDATE Employees SET Title = 'Development Lead' WHERE FirstName = 'Bradley';
删除 DELETE from Employees WHERE Productivity < 10;
为了使页能够访问执行 SQL 数据访问所需的类,必须将 System.Data 和 System.Data.SqlClient 命名空间导入到页中。
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
若要对 SQL 数据库执行选择查询,请创建与数据库的 SqlConnection,传递连接字符串,然后构造包含查询语句的 SqlDataAdapter 对象。若要用查询结果填充 DataSet 对象,请调用命令的 Fill 方法。
C#
*********************************************
SqlConnection myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Authors");
*******************************************
VB
*******************************************
Dim myConnection As New SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes")
Dim myCommand As New SqlDataAdapter("select * from Authors", myConnection)
Dim ds As New DataSet()
myCommand.Fill(ds, "Authors")
*******************************************
JScript
*******************************************
var myConnection:SqlConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");
var myCommand:SqlDataAdapter = new SqlDataAdapter("select * from Authors", myConnection);
var ds:DataSet = new DataSet();
myCommand.Fill(ds, "Authors");
*******************************************
正如本节前面所提到的,使用数据集的好处是它为您提供了断开连接的数据库视图。可以在应用程序中操作数据集,然后在以后协调更改和实际的数据库。对于长期运行的应用程序,这通常是最好的方法。对于 Web 应用程序,通常对每个请求执行短操作(一般只是显示数据)。通常不需要在一系列请求间保持 DataSet 对象。对于这类情况,可以使用 SqlDataReader。
SqlDataReader 对从 SQL 数据库检索的数据提供仅向前的只读指针。若要使用 SqlDataReader,请声明 SqlCommand 而不是 SqlDataAdapter。SqlCommand 公开返回 SqlDataReader 的 ExecuteReader 方法。还请注意,当使用 SqlCommand 时,必须显式打开和关闭 SqlConnection。调用 ExecuteReader 后,SqlDataReader 可以绑定到 ASP.NET 服务器控件,正如将在下一节看到的。
C#
*******************************************
SqlConnection myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");
SqlCommand myCommand = new SqlCommand("select * from Authors", myConnection);
myConnection.Open();
SqlDataReader dr = myCommand.ExecuteReader();
...
myConnection.Close();
*******************************************
VB
*******************************************
Dim myConnection As SqlConnection = New SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes")
Dim myCommand As SqlCommand = New SqlCommand("select * from Authors", myConnection)
myConnection.Open()
Dim dr As SqlDataReader = myCommand.ExecuteReader()
...
myConnection.Close()
*******************************************
JScript
*******************************************
var myConnection:SqlConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");
var myCommand:SqlCommand = new SqlCommand("select * from Authors", myConnection);
myConnection.Open();
var dr : SqlDataReader;
dr = myCommand.ExecuteReader();
...
myConnection.Close();
*******************************************
当执行不要求返回数据的命令(如插入、更新和删除)时,也使用 SqlCommand。该命令通过调用 ExecuteNonQuery 方法发出,而该方法返回受影响的行数。注意当使用 SqlCommand 时,必须显式打开连接;SqlDataAdapter 自动为您处理如何打开连接。
C#
*******************************************
SqlConnection myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");
SqlCommand myCommand = new SqlCommand(
"UPDATE Authors SET phone='(800) 555-5555' WHERE au_id = '123-45-6789'",
myConnection);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
*******************************************
VB
*******************************************
Dim myConnection As New SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes")
Dim myCommand As New SqlCommand( _
"UPDATE Authors SET phone='(800) 555-5555' WHERE au_id = '123-45-6789'", _
myConnection)
myCommand.Connection.Open()
myCommand.ExecuteNonQuery()
myCommand.Connection.Close()
*******************************************
JScript
*******************************************
var myConnection:SqlConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");
var myCommand:SqlCommand = new SqlCommand(
"UPDATE Authors SET phone='(800) 555-5555' WHERE au_id = '123-45-6789'",
myConnection);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
*******************************************
重要说明:始终记住在页完成执行之前关闭与数据模型的连接。如果不关闭连接,则可能会在等待页实例被垃圾回收处理期间不经意地超过连接限制。