there is no 通用数据库访问组件, you have to write your ownyou could look into the SQLHelp suggested by edobnet(oоОoоО):The Data Access Application Block for .NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp

解决方案 »

  1.   

    感谢edobnet(oоОoоО) ,saucer(思归)saucer信誉:325 ?!?!太厉害,不可思议!!edobnet(oоОoоО):是不是sqlhelp的开发人员?
      

  2.   

    sqlhelp  算是复杂点, 如果简单点,就用 petshop 里面封装的那部分。我们公司核心函数组件库 数据库部分,就是这两部分合并的结果。同时增加了一些我们自己东西。
      

  3.   

    我给出一个很简单的,你可以看看
    using System.Data;
    using System.Data.OleDb;
    using System.Data.SqlClient;
    using System.Xml;
    using System.Configuration;
    using System.Data.SqlTypes;
    using System.Data.OracleClient;

    /// <summary>
    /// NlinkDb 的摘要说明。
    /// </summary>
    public class LinkDb 
    {
    //类构造过程
    #region
    /// <summary>
    /// 数据库连接对象
    /// </summary>
    //ORACLE连接对象
    private OracleConnection oraConnection;
    // //SQL SERVER连接对象
    // private SqlConnection sqlConnection;
    /// <summary>
    /// 数据库连接字符串
    /// </summary>
    private string linkString = ConfigurationSettings.AppSettings["ORACLELinkString"];
    /// <summary>
    /// 默认的构造函数
    /// </summary>
    // public NlinkDb()
    // {
    // //
    // // TODO: 在此处添加构造函数逻辑
    // //
    // }
    /// <summary>
    /// 重载的析构函数
    /// </summary>
    // ~NlinkDb()
    // {
    // try
    // {
    // if (oleConnection.State == ConnectionState.Open)
    // oleConnection.Close();
    // }
    // catch(Exception e)
    // {
    // throw new Exception(e.Message);
    // }
    // finally
    // {
    // oleConnection.Close();
    // oleConnection.Dispose();
    // }
    // }
    #endregion
    //ORACLE数据库操作
    #region
    /// <summary>
    /// 连接到ORACLE服务器
    /// </summary>
    /// <returns>连接成功返回true</returns>
    public bool LinkOracleDB()
    {
    //
    bool returnFlag = true;
    try
    {
    oraConnection = new OracleConnection(linkString);
    oraConnection.Open();
    }
    catch(Exception e)
    {
    returnFlag = false;
    throw new Exception(e.Message);
    }
    finally
    {
    oraConnection.Close();
    }
    return returnFlag; 
    }
    /// <summary>
    /// 取得ORACLE的连接字符串
    /// </summary>
    /// <returns>返回当前连接的连接字符串</returns>
    public string GetORACLEConnectString()
    {
    return this.oraConnection.ConnectionString;
    } /// <summary>
    /// ORACLE执行指定的无返回SQL操作
    /// </summary>
    /// <param name="querySQL">要执行的SQL字符串</param>
    public int OracleExecuteNonQuery(string querySQL) 
    {
    int effRow = 0;
    try
    {
    this.LinkOracleDB();
    OracleCommand myCommand = new OracleCommand(querySQL, oraConnection);
    effRow = myCommand.ExecuteNonQuery(); }
    catch(Exception e)
    {
    throw new Exception(e.Message); }
    finally
    {
    oraConnection.Close();
    }
    return effRow; 
    } /// <summary>
    /// Oracle执行指定的返回object对象的SQL操作
    /// </summary>
    /// <param name="querySQL">要执行的SQL字符串</param>
    /// <returns>查询返回object对象</returns>
    public object OracleExecuteScalar(string querySQL) 
    {
    object obj = null;
    try
    {
    this.LinkOracleDB();
    OracleCommand myCommand = new OracleCommand(querySQL, oraConnection);
    obj = myCommand.ExecuteScalar();
    }
    catch(Exception e)
    {
    throw new Exception(e.Message);
    }
    finally
    {
    oraConnection.Close();
    }
    return obj;
    }
    /// <summary>
    /// Oracle执行指定的返回DatSet对象的SQL操作
    /// </summary>
    /// <param name="querySQL">要执行的SQL字符串</param>
    /// <returns>查询返回DatSet对象</returns>
    public DataSet OracleExecuteSQL(string querySQL)
    {
    DataSet ds = null;
    try
    {
    this.LinkOracleDB();
    OracleDataAdapter oraDataAdapter = new OracleDataAdapter(querySQL,oraConnection);
    ds = new DataSet();
    oraDataAdapter.Fill(ds);
    }
    catch(Exception e)
    {
    throw new Exception(e.Message);
    }
    finally
    {
    oraConnection.Close();
    }
    return ds;
    }
    /// <summary>
    /// 重载方法执行指定的返回DatSet对象的SQL操作
    /// </summary>
    /// <param name="querySQL">要执行的SQL字符串</param>
    /// <param name="srcTableName">数据集中的原表名</param>
    /// <returns>查询返回DatSet对象</returns>
    public DataSet OracleExecuteSQL(string querySQL,string srcTableName)
    {
    DataSet ds = null;
    try
    {
    this.LinkOracleDB();
    OracleDataAdapter oraDataAdapter = new OracleDataAdapter(querySQL,oraConnection);
    ds = new DataSet();
    oraDataAdapter.Fill(ds);
    }
    catch(Exception e)
    {
    throw new Exception(e.Message);
    }
    finally
    {
    oraConnection.Close();
    }
    return ds;
    }
    /// <summary>
    /// 重载方法执行指定的返回DatSet对象的SQL操作
    /// </summary>
    /// <param name="querySQL">要执行的SQL字符串</param>
    /// <param name="srcTableName">数据集中的原表名</param>
    /// <param name="startRecord">从0开始的记录号</param>
    /// <param name="maxRecords">要查询的最大记录数</param>
    /// <returns>查询返回DatSet对象</returns>
    public DataSet OracleExecuteSQL(string querySQL,string srcTableName,int startRecord,int maxRecords)
    {
    DataSet ds = null;
    try
    {
    this.LinkOracleDB();
    OracleDataAdapter oraDataAdapter = new OracleDataAdapter(querySQL,oraConnection);
    ds = new DataSet();
    oraDataAdapter.Fill(ds,startRecord,maxRecords,srcTableName);
    if(ds.Tables[0].Rows.Count==0) ds=null;
    }
    catch(Exception e)
    {
    throw new Exception(e.Message);
    }
    finally
    {
    oraConnection.Close();
    }
    return ds;
    } /// <summary>
    /// ORACLE执行指定的无返回带查询参数的SQL操作
    /// </summary>
    /// <param name="querySQL">要执行的SQL字符串</param>
    /// <param name="asParm">参数数组</param>
    /// <param name="asCols"></param>
    /// <returns>成功返回1</returns>
    public int OracleExecuteCommandNonQuery(string querySQL,Object[] asParm,int asCols) 
    {
    int effRow = 0;int i;
    try
    {
    this.LinkOracleDB();
    OracleCommand myCommand = new OracleCommand(querySQL, oraConnection); if(asCols>0)
    {
     OracleParameter[] paramData = new  OracleParameter[asCols]; for(i=0;i<asCols;i++)
    { if(asParm[i].GetType()==typeof(string))
    {
    paramData[i]=new OracleParameter(":"+i, OracleType.VarChar);     
    paramData[i].Value = asParm[i].ToString().Trim(); }
    else if(asParm[i].GetType()==typeof(long))
    {
    paramData[i]=new OracleParameter( ":"+i, OracleType.Int32);      
    paramData[i].Value = (long)asParm[i];
    }
    else if(asParm[i].GetType()==typeof(double) || asParm[i].GetType()==typeof(float))
    {
    paramData[i]=new OracleParameter( ":"+i, OracleType.Float);      
    paramData[i].Value = (double)asParm[i];
    } else if(asParm[i].GetType()==typeof(OracleType.Blob))
    {
    paramData[i]=new OracleParameter(":"+i,asParm[i]);
    paramData[i].IsNullable=true;
    }
    myCommand.Parameters.Add(paramData[i]);

    }
    }

    myCommand.CommandType = CommandType.Text;
    effRow = myCommand.ExecuteNonQuery(); }
    catch(Exception eX)
    {
    throw new Exception(eX.Message);
    }
    finally
    {
    oraConnection.Close();
    }
    return effRow; 
    }
    /// <summary>
    /// ORACLE执行指定的无返回带图片数据的SQL操作
    /// </summary>
    /// <param name="querySQL">要执行的SQL字符串</param>
    /// <param name="asParm">图片的数据</param>
    /// <returns></returns>
    public int OracleExecuteCommandNonQuery(string querySQL,byte[] asParm) 
    {
    int effRow = 0;
    try
    { this.LinkOracleDB();
    OracleCommand myCommand = new OracleCommand(querySQL, oraConnection); OracleParameter paramData = new OracleParameter( ":img", OracleType.Blob);      // 图片的数据 paramData.Value = asParm;
    myCommand.Parameters.Add(paramData);

    myCommand.CommandType = CommandType.Text;
    effRow = myCommand.ExecuteNonQuery(); }
    catch(Exception eX)
    {
    throw new Exception(eX.Message);
    }
    finally
    {
    oraConnection.Close();
    }
    return effRow; 
    }
    #endregion

    }
    }
      

  4.   

    lucidaxy() :自己看SqlHelper的说明,不过那位老兄有翻译成果提供一下?
    [email protected]