如何实现多个数据库连接(SQL,ACCESS,ORACLE)等
来源:互联网 发布:如何查看淘宝买家信用 编辑:程序博客网 时间:2024/06/08 17:06
我们看SQLConnection和OleDbConnection的父类的时候都看到了他继承了DdConnection这个类
1.public sealed class OleDbConnection : DbConnection, ICloneable, IDbConnection, IDisposable
2.public sealed class SqlConnection : DbConnection, ICloneable
再看 DbConnection,实现了IDbConnection的接口。
3.public abstract class DbConnection : Component, IDbConnection, IDisposable
所以我们就可以用接口来指向我们的子类
string connstr= ConfigurationManager.ConnectionStrings["connstr"].ConnectionString; string proName=ConfigurationManager.ConnectionStrings["connstr"].ProviderName; IDbConnection conn; if (proName == "Access") { conn = new OleDbConnection(connstr); } else if (proName == "Sql") { conn = new SqlConnection(connstr); } else { throw new Exception("没有选择对应的数据库吧"); } conn.Open(); using (IDbCommand cmd = conn.CreateCommand())//体现接口,调用的是OleDbCommadn或者SqlCommand { cmd.CommandText = "insert into T_Person(Name,Age) values('李艳',22)"; cmd.ExecuteNonQuery(); MessageBox.Show("成功"); }
接口只是指向具体的对象,调用的方法还是SQlconnection,sqlCommand.的.
只要修改配置文件,就能实现多个数据库的链接是不是很方便呢.?
接口和抽象类不能到底有什么区别呢?
2.override实现多态
真正的多态使用override来实现的。回过去看前面的例1,在基类Animal中将方法Eat()用virtual标记为虚拟方法,再在派生类Cat和Dog中用override对Eat()修饰,进行重写,很简单就实现了多态。需要注意的是,要对一个类中一个方法用override修饰,该类必须从父类中继承了一个对应的用virtual修饰的虚拟方法,否则编译器将报错。
好像讲得差不多了,还有一个问题,不知道你想没有。就是多层继承中又是怎样实现多态的。比如类A是基类,有一个虚拟方法method()(virtual修饰),类B继承自类A,并对method()进行重写(override修饰),现在类C又继承自类B,是不是可以继续对method()进行重写,并实现多态呢?看下面的例子。
例3:
{
public virtual void Eat()
{
Console.WriteLine("Animal eat");
}
}
public class Dog : Animal
{
public override void Eat()
{
Console.WriteLine("Dog eat");
}
}
public class WolfDog : Dog
{
public override void Eat()
{
Console.WriteLine("WolfDog eat");
}
}
class Tester
{
static void Main(string[] args)
{
Animal[] animals = new Animal[3];
animals[0] = new Animal();
animals[1] = new Dog();
animals[2] = new WolfDog();
for (int i = 0; i < 3; i++)
{
animals[i].Eat();
}
}
}
运行结果为:
Animal eat...
Dog eat...
WolfDog eat...
在上面的例子中类Dog继承自类Animal,对方法Eat()进行了重写,类WolfDog又继承自Dog,再一次对Eat()方法进行了重写,并很好地实现了多态。不管继承了多少层,都可以在子类中对父类中已经重写的方法继续进行重写,即如果父类方法用override修饰,如果子类继承了该方法,也可以用override修饰,多层继承中的多态就是这样实现的。要想终止这种重写,只需重写方法时用sealed关键字进行修饰即可。
3. abstract-override实现多态
先在我们在来讨论一下用abstract修饰的抽象方法。抽象方法只是对方法进行了定义,而没有实现,如果一个类包含了抽象方法,那么该类也必须用abstract声明为抽象类,一个抽象类是不能被实例化的。对于类中的抽象方法,可以再其派生类中用override进行重写,如果不重写,其派生类也要被声明为抽象类。看下面的例子。
例4:
{
}
public class Cat : Animal
{
public override void Eat()
{
Console.WriteLine("Cat eat");
}
}
public class Dog : Animal
{
public override void Eat()
{
Console.WriteLine("Dog eat");
}
}
public class WolfDog : Dog
{
public override void Eat()
{
Console.WriteLine("Wolfdog eat");
}
}
class Tester
{
static void Main(string[] args)
{
Animal[] animals = new Animal[3];
animals[0] = new Cat();
animals[1] = new Dog();
animals[2] = new WolfDog();
for (int i = 0; i < animals.Length; i++)
{
animals[i].Eat();
}
}
}
运行结果为:
Cat eat...
Dog eat...
Wolfdog eat...
从上面可以看出,通过使用abstract-override可以和virtual-override一样地实现多态,包括多层继承也是一样的。不同之处在于,包含虚拟方法的类可以被实例化,而包含抽象方法的类不能被实例化。
- 如何实现多个数据库连接(SQL,ACCESS,ORACLE)等
- 数据库连接字符串大全(SQL,Oracle,ACCESS...)
- 数据库连接字符串汇总(mysql、oracle、sql连接driver等)
- Oracle Access 数据库连接
- asp中数据库连接(sql 和access)
- 数据库连接字符串(MySQL,Oracle,SQL Server2000/2005/2008,SQLite,Access)
- C++ Access数据库连接、读写等
- 数据库连接串MSSQL、Oracle、Access
- 数据库连接字符串(SQL Server Access)
- C# 连接SQL Server、Access、Oracle等数据库
- (原创)SQL和ACCESS数据库连接管理类
- PL/SQL Developer如何支持多个Oracle安装
- SQL和ACCESS数据库连接管理类
- ASP完美转化ACCESS为SQL数据库连接
- ASP完美转化ACCESS为SQL数据库连接
- ASP完美转化ACCESS为SQL数据库连接
- java实现oracle数据库连接
- 实现Access/Sql/Oracle数据类型切换三步曲(一)
- 邮件发送
- 一篇讲解obj,lib,dll,exe的关系非常好的文章
- 程序员自我管理的9个原则
- 使用C Run-Time 获取当前进程的路径
- 不辜负每一个日出——Leo2011年总结
- 如何实现多个数据库连接(SQL,ACCESS,ORACLE)等
- 甲骨文总裁拉里·埃里森在耶鲁大学的演讲(史上最强的演讲)
- Java的时间处理
- ubuntu nginx php 配置
- linux 奇淫巧计 Manual FIle Locking
- delphi 快速读取文件 然后用TPerlRegEx类提取需要内容
- linux sar
- ubuntu 复制文件到xp (How i can copy file from server(OS:ubuntu 10.04) to my PC
- 在 Vim 中设置 Tab