>

SQL Server数据复制到的Access两步走

- 编辑:乐百家599手机首页 -

SQL Server数据复制到的Access两步走

本文实例讲述了C#经过oledb访问access数据库的不二等秘书籍。分享给大家供大家参考。具体深入分析如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Collections;
/// <summary>
/// AcceHelper 的摘要说明
/// </summary>
public static class AccessHelper
{
  //数据库连接字符串
  public static readonly string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="   HttpContext.Current.Request.PhysicalApplicationPath   System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  // 用于缓存参数的HASH表
  private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
  /// <summary>
  /// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
  /// </summary>
  /// <param name="connectionString">一个有效的连接字符串</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>执行命令所影响的行数</returns>
  public static int ExecuteNonQuery(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
      PrepareCommand(cmd, conn, null, cmdText, commandParameters);
      int val = cmd.ExecuteNonQuery();
      cmd.Parameters.Clear();
      return val;
    }
  }
  /// <summary>
  /// 用现有的数据库连接执行一个sql命令(不返回数据集)
  /// </summary>
  /// <remarks>
  ///举例: 
  /// int result = ExecuteNonQuery(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  /// <param name="conn">一个现有的数据库连接</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>执行命令所影响的行数</returns>
  public static int ExecuteNonQuery(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    PrepareCommand(cmd, connection, null, cmdText, commandParameters);
    int val = cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();
    return val;
  }
  /// <summary>
  ///使用现有的SQL事务执行一个sql命令(不返回数据集)
  /// </summary>
  /// <remarks>
  ///举例: 
  /// int result = ExecuteNonQuery(trans, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  /// <param name="trans">一个现有的事务</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>执行命令所影响的行数</returns>
  public static int ExecuteNonQuery(OleDbTransaction trans, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    PrepareCommand(cmd, trans.Connection, trans, cmdText, commandParameters);
    int val = cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();
    return val;
  }
  /// <summary>
  /// 用执行的数据库连接执行一个返回数据集的sql命令
  /// </summary>
  /// <remarks>
  /// 举例: 
  /// OleDbDataReader r = ExecuteReader(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  /// <param name="connectionString">一个有效的连接字符串</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>包含结果的读取器</returns>
  public static OleDbDataReader ExecuteReader(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
  {
    //创建一个SqlCommand对象
    OleDbCommand cmd = new OleDbCommand();
    //创建一个SqlConnection对象
    OleDbConnection conn = new OleDbConnection(connectionString);
    //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
    //因此commandBehaviour.CloseConnection 就不会执行
    try
    {
      //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
      PrepareCommand(cmd, conn, null, cmdText, commandParameters);
      //调用 SqlCommand 的 ExecuteReader 方法
      OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      //清除参数
      cmd.Parameters.Clear();
      return reader;
    }
    catch
    {
      //关闭连接,抛出异常
      conn.Close();
      throw;
    }
  }
  /// <summary>
  /// 返回一个DataSet数据集
  /// </summary>
  /// <param name="connectionString">一个有效的连接字符串</param>
  /// <param name="cmdText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>包含结果的数据集</returns>
  public static DataSet ExecuteDataSet(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
  {
    //创建一个SqlCommand对象,并对其进行初始化
    OleDbCommand cmd = new OleDbCommand();
    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
      PrepareCommand(cmd, conn, null, cmdText, commandParameters);
      //创建SqlDataAdapter对象以及DataSet
      OleDbDataAdapter da = new OleDbDataAdapter(cmd);
      DataSet ds = new DataSet();
      try
      {
        //填充ds
        da.Fill(ds);
        // 清除cmd的参数集合 
        cmd.Parameters.Clear();
        //返回ds
        return ds;
      }
      catch
      {
        //关闭连接,抛出异常
        conn.Close();
        throw;
      }
    }
  }
  /// <summary>
  /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
  /// </summary>
  /// <remarks>
  ///例如: 
  /// Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  ///<param name="connectionString">一个有效的连接字符串</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
  public static object ExecuteScalar(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
      PrepareCommand(cmd, connection, null, cmdText, commandParameters);
      object val = cmd.ExecuteScalar();
      cmd.Parameters.Clear();
      return val;
    }
  }
  /// <summary>
  /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
  /// </summary>
  /// <remarks>
  /// 例如: 
  /// Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  /// <param name="conn">一个存在的数据库连接</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
  public static object ExecuteScalar(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    PrepareCommand(cmd, connection, null, cmdText, commandParameters);
    object val = cmd.ExecuteScalar();
    cmd.Parameters.Clear();
    return val;
  }
  /// <summary>
  /// 将参数集合添加到缓存
  /// </summary>
  /// <param name="cacheKey">添加到缓存的变量</param>
  /// <param name="cmdParms">一个将要添加到缓存的sql参数集合</param>
  public static void CacheParameters(string cacheKey, params OleDbParameter[] commandParameters)
  {
    parmCache[cacheKey] = commandParameters;
  }
  /// <summary>
  /// 找回缓存参数集合
  /// </summary>
  /// <param name="cacheKey">用于找回参数的关键字</param>
  /// <returns>缓存的参数集合</returns>
  public static OleDbParameter[] GetCachedParameters(string cacheKey)
  {
    OleDbParameter[] cachedParms = (OleDbParameter[])parmCache[cacheKey];
    if (cachedParms == null)
      return null;
    OleDbParameter[] clonedParms = new OleDbParameter[cachedParms.Length];
    for (int i = 0, j = cachedParms.Length; i < j; i  )
      clonedParms =(OleDbParameter[])((ICloneable)cachedParms).Clone();
    return clonedParms;
  }
  /// <summary>
  /// 准备执行一个命令
  /// </summary>
  /// <param name="cmd">sql命令</param>
  /// <param name="conn">Sql连接</param>
  /// <param name="trans">Sql事务</param>
  /// <param name="cmdText">命令文本,例如:Select * from Products</param>
  /// <param name="cmdParms">执行命令的参数</param>
  private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] cmdParms)
  {
    //判断连接的状态。如果是关闭状态,则打开
    if (conn.State != ConnectionState.Open)
      conn.Open();
    //cmd属性赋值
    cmd.Connection = conn;
    cmd.CommandText = cmdText;
    //是否需要用到事务处理
    if (trans != null)
      cmd.Transaction = trans;
    cmd.CommandType = CommandType.Text;
    //添加cmd需要的存储过程参数
    if (cmdParms != null)
    {
      foreach (OleDbParameter parm in cmdParms)
        cmd.Parameters.Add(parm);
    }
  }
}

建议:未有特殊必要,不要使用mysql_fetch_array(),能够采纳mysql_fetch_row()或者mysql_fetch_assoc()完成平等的功能,且效能高。

while (!m_pRecordset_sql->adoEOF)  
{  
m_pRecordset_access->AddNew();  
for (int i = 0; i < m_pRecordset_sql->Fields->Count; i  )  
{  
vValue = m_pRecordset_sql->GetCollect(_variant_t((long)i));  
m_pRecordset_access->PutCollect(_variant_t((long)i), vValue);  
}  
m_pRecordset_access->Update();  
m_pRecordset_sql->MoveNext();  
} 

你可能感兴趣的篇章:

  • C#编制程序完成连接ACCESS数据库实例详解
  • C#使用ADO.Net部件来做客Access数据库的点子
  • C#动态创造Access数据库及表的秘技
  • C#数据库操作类AccessHelper实例
  • c#连接access数据库操作类分享
  • C# Access数据库增加和删除查改的简要方法
  • c# 连接access数据库config配置
  • 利用C#远程存取Access数据库
  • C# 操作 access 数据库的实例代码

您也许感兴趣的篇章:

  • C#数据库操作类AccessHelper实例
  • c#连接access数据库操作类分享
  • asp.net(C#) Access 数据操作类
  • ASP.net(c#)用类的考虑贯彻插入数据到ACCESS例子
  • C# Access数据库增加和删除查改的简约方法
  • ACCESS的参数化查询,附VBSC宝马X3IPT(ASP)和C#(ASP.NET)函数
  • C#动态成立Access数据库及表的不二秘籍
  • C#编制程序落成连接ACCESS数据库实例详解
  • C#对Access举办增加和删除改查的欧洲经济共同体示例
  • C#采纳ADO.Net部件来走访Access数据库的诀要
  • C#经过oledb访问access数据库的措施
  • C#贯彻Access通用访问类奥莱DbHelper完整实例

设若急需拜访结果聚焦的数码,能够运用下列三个函数中的一个(均以结果集能源符作为参数,并活动重返下一条记下,在表末尾时重返false)

因为表的字段相比多,所以只好用八个循环往复

// OleDbSample.cs
// 若要从命令行生成此示例,请使用命令:
// csc oledbsample.cs
using System;
using System.Data;
using System.Data.OleDb;
using System.Xml.Serialization;
public class MainClass 
{
 public static void Main ()
 {
  // 设置访问连接并选择字符串。
  // 如果从命令行生成此示例,
  // 则必须更改 BugTypes.MDB 的路径:
#if USINGPROJECTSYSTEM
  string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\BugTypes.MDB";
#else
  string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BugTypes.MDB";
#endif
  string strAccessSelect = "SELECT * FROM Categories";
  // 创建数据集并向其中添加 Categories 表:
  DataSet myDataSet = new DataSet();
  OleDbConnection myAccessConn = null;
  try
  {
   myAccessConn = new OleDbConnection(strAccessConn);
  }
  catch(Exception ex)
  {
   Console.WriteLine("Error: Failed to create a database connection. n{0}", ex.Message);
   return;
  }
  try
  {
   OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect,myAccessConn);
   OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
   myAccessConn.Open();
   myDataAdapter.Fill(myDataSet,"Categories");
  }
  catch (Exception ex)
  {
   Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.n{0}", ex.Message);
   return;
  }
  finally
  {
   myAccessConn.Close();
  }
  // 一个数据集可以包含多个表,因此可以将这些表都放入
  // 一个数组中:
  DataTableCollection dta = myDataSet.Tables;
  foreach (DataTable dt in dta)
  {
   Console.WriteLine("Found data table {0}", dt.TableName);
  }
  // 下面两行显示两种不同方法,可用于获取数据集中
  // 的表计数:
  Console.WriteLine("{0} tables in data set", myDataSet.Tables.Count);
  Console.WriteLine("{0} tables in data set", dta.Count);
  // 下面几行显示如何按名称
  // 从数据集中获取特定表的信息:
  Console.WriteLine("{0} rows in Categories table", myDataSet.Tables["Categories"].Rows.Count);
  // 列信息自动从数据库中提取,因此
  // 可以在此处看到这些信息:
  Console.WriteLine("{0} columns in Categories table", myDataSet.Tables["Categories"].Columns.Count);
  DataColumnCollection drc = myDataSet.Tables["Categories"].Columns;
  int i = 0;
  foreach (DataColumn dc in drc)
  {
   // 打印列下标,然后打印列的名称及其
   // 数据类型:
   Console.WriteLine("Column name[{0}] is {1}, of type {2}",i   , dc.ColumnName, dc.DataType);
  }
  DataRowCollection dra = myDataSet.Tables["Categories"].Rows;
  foreach (DataRow dr in dra)
  {
   // 打印 CategoryID 作为下标,然后打印 CategoryName:
   Console.WriteLine("CategoryName[{0}] is {1}", dr[0], dr[1]);
  }
 }
}

本文实例讲述了C#操作Access通用类。分享给大家供大家参谋。具体如下:

4、mysql_fetch_object():从结果聚集获得1行作为目的,各样字段以目的情势访问。

开端的主张是用五个recordset,三个从SQL取多少,3个往Access中间插入数据

瞩望本文所述对大家的C#次第设计有所支持。

但愿本文所述对大家的C#先后设计有着援助。

5、mysql_data_seek(int $num):移动内部结果的指针,$num是想要设定的新的结果集指针的行数。

你可能感兴趣的小说:

  • 30个很棒的PHP开源CMS内容管理种类总计
  • SQLite数据库管理种类-我所认识的数据库引擎
  • Swift中的Access Control权限决定介绍
  • php结合ACCESS的跨库查询成效
  • C#透过oledb访问access数据库的诀窍
  • C#操作Access通用类实例
  • Apache服务器中.htaccess的基本配置总计
  • mysql Access denied for user ‘root’@’localhost’ (using password: YES)化解办法
  • Javascript连接Access数据库完整实例
  • Access转成SQL数据库的主意
  • Access创设3个简约MIS管理种类

此间演示了怎么在 C# 中使用 Microsoft Access 数据库。包含什么创建数量集并从数据库向该数额集增多表。

在PHP中举办select语句重返2个结果集,能够用来对种种字段的管理

上述的连锁内容正是对SQL Server数据复制到的Access中的描述,希望会给您带来一些声援在此方面。

本文由乐百家数据库发布,转载请注明来源:SQL Server数据复制到的Access两步走