1.SqlCommand 类
功能
表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。无法继承此类。
命名空间: System.Data.SqlClient
程序集: System.Data(在 System.Data.dll 中)
语法
public sealed class SqlCommand : DbCommand, ICloneable
备注
当创建 SqlCommand 的实例时,读/写属性将被设置为它们的初始值。有关这些值的列表,请参见 SqlCommand 构造函数。
示例
下面的示例创建一个 SqlConnection、一个 SqlCommand 和一个 SqlDataReader。该示例读取所有数据,并将其写到控制台。最后,示例在退出 Using 代码块时先后关闭 SqlDataReader 和 SqlConnection。
private static void ReadOrderData(string connectionString)
{
string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",reader[0], reader[1]));
}
}
finally
{
// Always call Close when done reading.
reader.Close();
}
}
}
2.SqlCommand.ExecuteReader 方法
功能
将 CommandText 发送到 Connection 并生成一个 SqlDataReader。
重载列表
ExecuteReader() 将 CommandText 发送到 Connection 并生成一个 SqlDataReader。
ExecuteReader(CommandBehavior) 将 CommandText 发送到 Connection,并使用 CommandBehavior 值之一生成一个 SqlDataReader。
命名空间: System.Data.SqlClient
程序集: System.Data(在 System.Data.dll 中)
语法
public SqlDataReader ExecuteReader()
返回值
类型:System.Data.SqlClient.SqlDataReader
一个 SqlDataReader 对象。
示例
下面的示例创建一个 SqlCommand,然后通过传递两个字符串来执行它,其中一个字符串是 Transact-SQL SELECT 语句,另一个字符串用于连接至数据源。
private static void CreateCommand(string queryString,string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(queryString, connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(String.Format("{0}", reader[0]));
}
}
}
3.SqlCommand.ExecuteNonQuery 方法
功能
对连接执行 Transact-SQL 语句并返回受影响的行数。
命名空间: System.Data.SqlClient
程序集: System.Data(在 System.Data.dll 中)
语法
public override int ExecuteNonQuery()
返回值
类型:System.Int32
受影响的行数。
备注
您可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库中的数据。
虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。如果正在执行插入或更新操作的表上存在触发器,则返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于其他所有类型的语句,返回值为 -1。如果发生回滚,则返回值也是 -1。
示例
下面的示例创建一个 SqlCommand,然后使用 ExecuteNonQuery 执行它。给该示例传递两个字符串:一个字符串是 Transact-SQL 语句(如 UPDATE、INSERT 或 DELETE),另一个字符串用于连接数据源。
private static void CreateCommand(string queryString,string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
4.SqlDataReader 类
命名空间: System.Data.SqlClient
程序集: System.Data(在 System.Data.dll 中)
语法
public class SqlDataReader : DbDataReader,
IDataReader, IDisposable, IDataRecord
备注
若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不要直接使用构造函数。
在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为 SqlDataReader 服务,对 SqlConnection 无法执行任何其他操作,只能将其关闭。除非调用 SqlDataReader 的 Close 方法,否则会一直处于此状态。例如,在调用 Close 之前,无法检索输出参数。
SqlDataReader 的用户可能会看到在读取数据时另一进程或线程对结果集所做的更改。但是,确切的行为与执行时间有关。
当 SqlDataReader 关闭后,只能调用 IsClosed 和 RecordsAffected 属性。尽管当 SqlDataReader 存在时可以访问 RecordsAffected 属性,但是请始终在返回 RecordsAffected 的值之前调用 Close,以保证返回精确的值。
说明
为了获得最佳性能,SqlDataReader 会避免创建不必要的对象或复制不必要的数据。因此,对 GetValue 等方法的多次调用将返回对相同对象的引用。如果正在修改由 GetValue 等方法返回的对象的基础值,请使用警告。
示例
下面的示例创建一个 SqlConnection、一个 SqlCommand 和一个 SqlDataReader。该示例读取全部数据,并将这些数据写到控制台窗口。随后此代码关闭 SqlDataReader。SqlConnection 在 using 代码块的结尾处自动关闭。
private static void ReadOrderData(string connectionString)
{
string queryString ="SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection =new SqlConnection(connectionString))
{
SqlCommand command =new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
// Call Close when done reading.
reader.Close();
}
}
5.SqlDataReader.Read 方法
功能:使 SqlDataReader 前进到下一条记录。
命名空间: System.Data.SqlClient
程序集: System.Data(在 System.Data.dll 中)
返回值
类型:System.Boolean
如果存在多个行,则为 true;否则为 false。
备注
SqlDataReader 的默认位置在第一条记录前面。因此,必须调用 Read 来开始访问任何数据。
对于每个关联的 SqlConnection,一次只能打开一个 SqlDataReader,在第一个关闭之前,打开另一个的任何尝试都将失败。类似地,在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为它提供服务,直到调用 Close 时为止。
示例
下面的示例创建一个 SqlConnection、一个 SqlCommand 和一个 SqlDataReader。该示例读取全部数据,并将这些数据写到控制台窗口。随后此代码关闭 SqlDataReader。SqlConnection 在 using 代码块的结尾处自动关闭。
private static void ReadOrderData(string connectionString)
{
string queryString ="SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection =new SqlConnection(connectionString))
{
SqlCommand command =new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
// Call Close when done reading.
reader.Close();
}
}
6.SqlDataReader.HasRows 属性
功能
获取一个值,该值指示 SqlDataReader 是否包含一行或多行。
命名空间: System.Data.SqlClient
程序集: System.Data(在 System.Data.dll 中)
语法
public override bool HasRows { get; }
属性值
类型:System.Boolean
如果 SqlDataReader 包含一行或多行,则为 true;否则为 false。
7.SqlDataAdapter 类
功能
表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。无法继承此类。
命名空间:System.Data.SqlClient
程序集:System.Data(在 system.data.dll 中)
备注
SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。
当 SqlDataAdapter 填充 DataSet 时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用 FillSchema,让 SqlDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。有关更多信息,请参见 向 DataSet 添加现有约束。
SqlDataAdapter 与 SqlConnection 和 SqlCommand 一起使用,以便在连接到 SQL Server 数据库时提高性能。
SqlDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和TableMappings 属性,以便于数据的加载和更新。
示例
下面的示例使用 SqlCommand、SqlDataAdapter 和 SqlConnection 从数据库中选择记录,并用选定的行填充 DataSet。然后返回已填充的 DataSet。为完成此任务,向该方法传递一个已初始化的 DataSet、一个连接字符串和一个查询字符串,后者是一个 Transact-SQL SELECT 语句。
private static DataSet SelectRows(DataSet dataset,string connectionString,string queryString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection);
adapter.Fill(dataset);
return dataset;
}
}
8.DbDataAdapter.Fill 方法 (DataSet, String)
功能
在 DataSet 中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。
命名空间:System.Data.Common
程序集:System.Data(在 system.data.dll 中)
语法
public int Fill (
DataSet dataSet,
string srcTable
)
参数
dataSet
要用记录和架构(如果必要)填充的 DataSet。
srcTable
用于表映射的源表的名称。
返回值
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。
Fill 方法支持以下情况:DataSet 包含多个 DataTable 对象,而这些对象的名称只有大小写不同。在这种情况下,Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配的表,则新建一个。下面的 C# 代码阐释该行为。
DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
dataset.Tables.Add("AAA");
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".
示例
下面的示例使用派生类 OleDbDataAdapter,利用 categories 表中的行来填充 DataSet。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet。
public void GetRecords()
{
// ...
// create dataSet and adapter
// ...
adapter.Fill(dataSet, "Categories");
}
(责任编辑:IT) |