标题:请教:如何让一个ASP.NET项目能动态支持 SQL 和 ACCESS 数据库
只看楼主
yjs8088
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-9
 问题点数:0 回复次数:7 
请教:如何让一个ASP.NET项目能动态支持 SQL 和 ACCESS 数据库
问题同题目~
谢谢~~
搜索更多相关主题的帖子: SQL 数据库 NET ACCESS ASP 
2008-06-09 16:07
hebingbing
Rank: 6Rank: 6
来 自:黄土高坡
等 级:贵宾
威 望:27
帖 子:3417
专家分:371
注 册:2007-10-22
得分:0 
try
{
sql连接
}
catch
{
access连接
}
2008-06-09 16:49
yjs8088
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-9
得分:0 
回复 2# hebingbing 的帖子
谢谢您的回复 连接我在 web.config 设置的~

现在问题是项目里面~~

比如 SqlHelper.cs 文件里(其他文件也有类似的问题~)

会用到 SqlConnection conn = new SqlConnection(strConn);
ACCESS 却是 OleDbConnection conn = new OleDbConnection(strConn);

怎么做在更换数据库后,项目里面的东西改动最少~
2008-06-09 17:26
hebingbing
Rank: 6Rank: 6
来 自:黄土高坡
等 级:贵宾
威 望:27
帖 子:3417
专家分:371
注 册:2007-10-22
得分:0 
那样的话最好的办法就是将你的和数据库互交的东西专门放在一个类中,然后在这个类中设置两种数据库的连接,没有其他更好的办法……
2008-06-09 18:34
yjs8088
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-9
得分:0 
回复 4# hebingbing 的帖子
非常感谢您的回复~具体怎么做呢~~刚学.NET 对一些东西还不太熟悉~~

比如:
在DAL项目中的 Affiche.cs需要用到 SqlDataReader SqlDR = SqlHelper.ExecuteReader(SqlStr); 或者 OleDbDataReader SqlDR = SqlHelper.ExecuteReader(SqlStr);

如果我写在一个类中 怎么区分是使用 SQL 还是 OLEDB ?

还是 给SQL写一个 给 OLEDB写一个
2008-06-09 20:36
hebingbing
Rank: 6Rank: 6
来 自:黄土高坡
等 级:贵宾
威 望:27
帖 子:3417
专家分:371
注 册:2007-10-22
得分:0 
假如你的系统是按照三层结构来做的话,你要改的也就是一个数据层,具体也就是我上面说的那样……
try
{
sql连接
}
catch
{
access连接
}
2008-06-09 20:43
yjs8088
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-9
得分:0 
回复 6# hebingbing 的帖子
明白了 谢谢~非常感谢~

对了 还有一个问题 就是在 web.config 中设置数据库的相对路径的问题~
<connectionStrings>
<!--连接ACCESS数据库时调用  -->
  <add name="SqlConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\Pcschool.Web\Database\homepage.mdb;Jet OLEDB:Database Password=123456789"
   providerName="System.Data.OleDb" />
<!-- 连接SQLSERVER数据库时调用-->
 </connectionStrings>

Source=\Pcschool.Web\Database\homepage.mdb 这个怎么样写成相对路径?在网上看到说这样写source=|DataDirectory|homepage.mdb 但是这样写数据库得在 App_Data 中才有用~~
2008-06-09 21:04
yms123
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
得分:0 
楼主这种情况涉及到一种面向对象的设计模式,工厂对象模式或者说适配器模式
using System;
namespace EFT
{
   //抽象信用卡类
   abstract class EFT
   {
       public abstract void process();
   }
   
   //具体子类虚拟支票
   class VirtualCheck:EFT
   {
       public override void process()
       {
          Console.WriteLine("虚拟支票");
       }
   }
   
   //具体子类万事达信用卡
   class MasterCard:EFT
   {
       public override void process()
       {
          Console.WriteLine("万事达卡");
       }
   }
   
   //信用卡工厂对象
   class EFTFactory
   {
      //创建信用卡对象方法
      public EFT createEFT(string type)
      {
           switch(type.ToLower())
           {
                case "Virtualcheck":
                   return new VirtualCheck();
                break;
                case "mastercard":
                   return new MasterCard();
                break;
                default:
                   return null;
           }
      }
   }
   
   //主程序(调用处)
   class Client
   {
      [STAThread]
      static void Main(string[] args)
      {
           EFT eft;//信用卡类
           EFTFactory eftFactory=new EFTFactory();//信用卡工厂对象
           eft=eftFactory.createEFT("VirtualCheck");//创建虚拟支票
           eft.process();
           eft=eftFactory.createEFT("mastercard");//创建万事达卡
           eft.process();
           Console.Read();//暂停程序运行查看输出结果           
      }
   }
}
以上程序是某本设计模式教程里的代码,充分的展示了工厂对象设计模式的原理,这段代码希望对楼主现在的功能有所启发。
2008-06-10 10:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-218341-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.273607 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved