using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;/// <summary>
/// 数据库连接基类
/// </summary>
public class DataConnection
{
    public string password = "";
    public string userid = "";
    public string datasource = "";    public DataConnection()
    {
password = "";
userid = "";
datasource = "";
    }
    
    /// <summary>
    /// 数据库密码
    /// </summary>
    public string Password
    {
set { password = value;}
get { return password; }
    }
    
    /// <summary>
    /// 数据库用户名
    /// </summary>
    public string UserId
    {
set { userid = value;}
get { return userid; }
    }
    
    /// <summary>
    /// 数据源名称
    /// </summary>
    public string DataSource
    {
set { datasource = value;}
get { return datasource; }
    }
}/// <summary>
/// Ole数据库连接,继承DataConnection类
/// </summary>
public class ConnOle:DataConnection
{
    public ConnOle(){}
    public OleDbConnection conn;
}/// <summary>
/// Ole连接informix数据库,继承ConnOle类
/// </summary>
public class ConnOleInformix:ConnOle
{
    public bool info;
    public ConnOleInformix()
    {
info = true;
    }   
 
    /// <summary>
    /// 设置Persist Security Info属性
    /// </summary>
    public bool Info
    {
set { info = value;}
get { return info; }
    }

    public OleDbConnection Conn
    {
get
{
    conn = new OleDbConnection();
    conn.ConnectionString = "Provider = ifxoledbc.2;password = "+Password+";User ID = "+UserId+";Data Source = "+DataSource+";Persist Security Info = "+Info+"";
    return conn;
}
    }
}/// <summary>
/// Ole连接Access数据库,继承ConnOle类
/// </summary>
public class ConnOleAccess:ConnOle
{
    public OleDbConnection Conn
    {
get
{
    conn = new OleDbConnection();
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DataSource+";Jet OLEDB:Database Password="+Password+";";
    return conn;
}
    }
}
//----------------------------------------------------------------------------------------
/// <summary>
/// 具体使用类结构
/// </summary>
public class DataClass
{
public static void Main()
{  
//连接infomix数据库
/*
ConnOleInformix COInfo = new ConnOleInformix();
COInfo.UserId        = "wyd";
COInfo.Password      = "123456";
COInfo.DataSource    = "abcd@cld3304c_tcp";
        OleDbConnection conn = COInfo.Conn;
*/ //连接access数据库
ConnOleAccess COAccs = new ConnOleAccess();
COAccs.DataSource = "aa.mdb";
OleDbConnection conn = COAccs.Conn; OleDbCommand cmd = new OleDbCommand();
cmd.Connection   = conn;
try
{
cmd.Connection.Open();
cmd.CommandText = "insert into aa (aa) values ('ggrrtt')";
int intRows = cmd.ExecuteNonQuery();
if(intRows != 1)
{
MessageBox.Show("Did not insert row");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cmd.Connection.Close();
}
MessageBox.Show("ok");
}
}

解决方案 »

  1.   

    首先
        public string password = "";
        public string userid = "";
        public string datasource = "";    public DataConnection()
        {
    password = "";
    userid = "";
    datasource = "";
        }
     有必要两个都符初值吗?还有,既然你做成了多数据库形式,建议用工厂方法模式,这样有更好的灵活性和扩展性
      

  2.   

    为常用的数据库分别写连接字串可能更合用一点,
    不过我没有什么依据,只是习惯在数据访问层判一下库类型,
    为SQL Server 和Oracle分别写连接字串(我用到的只有这两种库)
      

  3.   

    将连接字符串放在config文件中
    便于将来修改
      

  4.   

    打开www.google.com输入:Microsoft Application block点击第一条查询结果对比一下你自己写的相信你会学到不少东西
      

  5.   

    Microsoft Data Access Application Block不错,没必要自己写。
      

  6.   

    Microsoft Data Access Application Block 还是有一些缺陷的,自己写是很有必要的。1.连接字符串的处理要和数据访问层分离开,这样的话修改一处就不会影响到另一处。2.你不会同时访问Access 和 SQL 吧,代码里好像没有作判断。两个都实例化了一下,但是大多数情况是有一半是用不到的。http://www.52life.cn/jyk 我的bloghttp://bbs.52life.cn/   成长中的BBS15123327 我的群,欢迎加入,一起讨论。
      

  7.   

    微软的DAAB是有源码的,你可以参考
      

  8.   

    同意 lovewindy(LOVE风云) 的方法,用工厂模式的方法来写这个类,扩展性很好的
    一般比较抽象的基类写成一个接口比较合理
      

  9.   

    ConnOleInformix COInfo = new ConnOleInformix();
    COInfo.UserId        = "wyd";
    COInfo.Password      = "123456";
    COInfo.DataSource    = "abcd@cld3304c_tcp";
            OleDbConnection conn = COInfo.Conn;
    */ //连接access数据库
    ConnOleAccess COAccs = new ConnOleAccess();
    COAccs.DataSource = "aa.mdb";
    OleDbConnection conn = COAccs.Conn; OleDbCommand cmd = new OleDbCommand();
    cmd.Connection   = conn;我觉得你这个主函数里面的内容有些问题,你先创建了一个对informix的数据操作类,然后把conn赋值到informix的连接,下面又创建了一个access的数据操作类,有把conn赋值为access的连接,而测试的OleDbCommand只有一个,不如传个参数n到主函数,然后根据参数判断要连接的数据库
    switch n
    {
    case 1:
    ....informix;
    break;
    case 2:
    .... access:
    break;
    }
    下面再执行OleDbCommand
      

  10.   

    恩,下面是作为测试用的,先用informix测试了一下,再用access测试了一下~
      

  11.   

    http://www.connectionstrings.com/
    这里才真算的上是数据库连接大全
      

  12.   

    我以前参考微软的写了一个。
    交流一下。http://chjl.cn/Article/Read.aspx?ArticleID=86