ADO(ActiveX Data Object)
ADO对象模型:
Connection:连接对象,用于创建数据源连接。
Command:命令对象,用于执行动作查询,如查询更新等。
Recordset:记录集对象,保存来自基本表或命令对象返回的结果,来操作查看查询结果。
Field:字段对象,依赖于记录集对象使用。可使用Fields集合获取记录集中的每个字段的信息。
Parameter:参数对象,依赖于命令对象使用,用于为参数查询提供数据。同时使用参数对象和命令对象,可使数据库对查询进行预编译,从而提高速度。
Property:属性对象,每个联接对象、命令对象、记录集对象以及字段对象都有一个属性对象集合。使用属性对象可以访问特定对象的主要信息。
Error:错误对象,依赖联接对象使用。
关系:
用Connection建立与服务器的连接,然后用Command对象执行命令,如查询,更新等。用Recordset对象来操作和查看查询结果。
Parameters集合和Parameters对象中的是Command对象的参数信息。在发生错误后,在Connection的Error集合和Error对象提供了错误信息。得到查询结果后,Filed集合和Filed对象就能通过Recordset对象使用啦,它们提供了相关的字段信息。
Connection对象包含了初始和建立连接的机制,同时也包含了执行查询、使用事务等。在缺省情况下,使用的是MS提供的ODBC驱动。
实例:
//给你部分类:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
namespace Channels
{
/// <summary>
/// 数据库操作参数列表类
/// </summary>
public class SqlParameterList
{
public List<SqlParameter> plist = new List<SqlParameter>();
/// <summary>
/// 把参数添加到参数列表
/// </summary>
/// <param name="sp">Sql参数</param>
public void AddAParameter(string name, SqlDbType type, int len, object value, bool output)
{
SqlParameter sp = new SqlParameter(name, type, len);
if (len > 0) sp.Size = len;
sp.Value = value;
if (output) sp.Direction = ParameterDirection.Output;
plist.Add(sp);
}
public void AddAParameter(string name, SqlDbType type, object value)
{
AddAParameter(name, type, 0, value, false);
}
public void AddAParameter(string name, SqlDbType type, int len, object value)
{
AddAParameter(name, type, len, value, false);
}
public void AddAParameter(string name, SqlDbType type, object value, bool output)
{
AddAParameter(name, type, 0, value, output);
}
/// <summary>
/// 添加新Sql参数
/// </summary>
/// <param name="name">参数名</param>
/// <param name="type">参数类性</param>
/// <param name="obj">参数值</param>
/// <returns>Sql参数</returns>
public static SqlParameter NewSqlParameter(string name, SqlDbType type, object obj)
{
SqlParameter sp = new SqlParameter(name, type);
sp.Value = obj;
return sp;
}
}
}
//数据库操作类
using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient;
namespace Channels
{
/// <summary>
/// 数据库操作类
/// </summary>
public class DataAccessor
{
//private static string connString = System.Configuration.ConfigurationManager.ConnectionStrings["DoorControlService"].ConnectionString;
private static string connString = ConfigFile.GetConnectionStringByName("ChannelControlService");
/// <summary>
/// 添加参数到Sql语句或存储过程
/// </summary>
/// <param name="com">SqlCommand对象</param>
/// <param name="splist">参数列表</param>
private static void AddParameters(SqlCommand com, SqlParameterList splist)
{
if (splist != null && splist.plist != null)
foreach (SqlParameter sp in splist.plist)
{
com.Parameters.Add(sp);
}
}
/// <summary>
/// 仅执行设置好的command命令,无返回值
/// </summary>
/// <param name="sql">Sql语句或存储过程</param>
/// <param name="IsProcedure">是否存储过程</param>
/// <param name="splist">参数列表,无参数输入null</param>
/// <returns>返回受影响的行数</returns>
public static int ExecuteSqlOnly(string sql, bool IsProcedure, SqlParameterList splist)
{
SqlConnection con = new SqlConnection(connString);
SqlCommand com = new SqlCommand(sql, con);
if (IsProcedure)
{
com.CommandType = CommandType.StoredProcedure;
}
if (splist != null)
{
AddParameters(com, splist);
}
if (con.State == ConnectionState.Closed)
{
con.Open();
}
int result = -101;
try
{
result = com.ExecuteNonQuery();
con.Close();
}
catch
{
con.Close();
}
return result;
}
/// <summary>
/// 获取执行后的结果,即结果集第一行的第一列
/// </summary>
/// <param name="sql">Sql语句或存储过程</param>
/// <param name="IsProcedure">是否存储过程</param>
/// <param name="splist">参数列表,无参数输入null</param>
/// <returns>返回执行后的结果集中的第一行的第一列</returns>
public static object GetExecuteSqlResult(string sql, bool IsProcedure, SqlParameterList splist)
{
SqlConnection con = new SqlConnection(connString);
SqlCommand com = new SqlCommand(sql, con);
if (IsProcedure)
{
com.CommandType = CommandType.StoredProcedure;
}
if (splist != null)
{
AddParameters(com, splist);
}
object result = null;
if (con.State == ConnectionState.Closed)
{
con.Open();
}
try
{
result = com.ExecuteScalar();
con.Close();
}
catch (Exception ex)
{
con.Close();
throw ex;
}
return result;
}
/// <summary>
/// 获取查询后的结果集
/// </summary>
/// <param name="sql">Sql语句或存储过程</param>
/// <param name="IsProcedure">是否存储过程</param>
/// <param name="splist">参数列表,无参数输入null</param>
/// <returns>查询的DataSet结果数据集</returns>
public static DataSet GetExcuteDataSet(string sql, bool IsProcedure, SqlParameterList splist)
{
SqlConnection con = new SqlConnection(connString);
SqlCommand com = new SqlCommand(sql, con);
SqlDataAdapter sda = new SqlDataAdapter(com);
if (IsProcedure)
{
com.CommandType = CommandType.StoredProcedure;
}
if (splist != null)
{
AddParameters(com, splist);
}
DataSet ds = new DataSet();
if (con.State == ConnectionState.Closed)
{
con.Open();
}
try
{
sda.Fill(ds);
con.Close();
}
catch (Exception ex)
{
con.Close();
throw ex;
}
return ds;
}
}
}