Discuz!NT官方社区

首页 » Discuz!NT开发与测试 » Discuz!NT整合 » 请检查DNT.config中Dbtype节点数据库类型是否正确
freedom825 - 2007-12-28 17:07:00
我把DNT.config放到了网站根目录下,而且设置如下:
<?xml version="1.0"?>
<BaseConfigInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Dbconnectstring>Data Source=test\SQLEXPRESS;User ID=DBuser;Password=DBpass;Initial Catalog=discuz;Pooling=true</Dbconnectstring>
  <Tableprefix>dnt_</Tableprefix>
  <Forumpath>/bbs/</Forumpath>
  <Dbtype>SqlServer</Dbtype>
  <Founderuid>1</Founderuid>
</BaseConfigInfo>

结果在整合了登录后,运行错误如下:
[Exception: 请检查DNT.config中Dbtype节点数据库类型是否正确,例如:SqlServer、Access、MySql]
  Discuz.Data.DatabaseProvider.GetProvider() in D:\svn\bbs\Discuz.Data\DbProvider\DatabaseProvider.cs:29
  Discuz.Data.DatabaseProvider..cctor() in D:\svn\bbs\Discuz.Data\DbProvider\DatabaseProvider.cs:18

[TypeInitializationException: “Discuz.Data.DatabaseProvider”的类型初始值设定项引发异常。]
  Discuz.Data.DatabaseProvider.GetInstance() in D:\svn\bbs\Discuz.Data\DbProvider\DatabaseProvider.cs:45
  Discuz.Forum.OnlineUsers.GetOnlineUserByIP(Int32 userid, String ip) in D:\svn\bbs\Discuz.Forum\OnlineUsers.cs:314
  Discuz.Forum.OnlineUsers.UpdateInfo(String passwordkey, Int32 timeout, Int32 uid, String passwd) in D:\svn\bbs\Discuz.Forum\OnlineUsers.cs:550
  Discuz.Forum.OnlineUsers.UpdateInfo(String passwordkey, Int32 timeout) in D:\svn\bbs\Discuz.Forum\OnlineUsers.cs:575

大家帮帮忙分析一下
freedom825 - 2007-12-28 17:31:00
雪人帮忙啊,周末了,急!
netboy - 2008-1-3 9:35:00
这个问题我也头疼了很久。如果你是用虚拟目录的话,要把DNT.CONFIG放到根目录下,我的根目录是C:\Inetpub\wwwroot。
雪人 - 2008-1-4 19:33:00
开源了,楼主可以看看代码

抛出这个异常的是这里

        /// <summary>
        /// IDbProvider接口
        /// </summary>
        public static IDbProvider Provider
        {
            get
            {
                if (m_provider == null)
                {
                    lock(lockHelper)
                    {
                        if (m_provider == null)
                        {
                            try
                            {
                                m_provider = (IDbProvider)Activator.CreateInstance(Type.GetType(string.Format("Discuz.Data.{0}Provider, Discuz.Data.{0}", BaseConfigs.GetDbType)));
                            }
                            catch
                            {
                                throw new Exception("请检查DNT.config中Dbtype节点数据库类型是否正确,例如:SqlServer、Access、MySql,注意大小写。");
                            }
                           
                        }
                    }
                   
                    //m_provider = new DbProviderFinder().GetDbProvider("accesss");
           
                   
                }
                return m_provider;
            }
        }


但从代码里分析下就能看出来,实际上,只要是没正确载入dnt.config,都可能导致无法正常获得数据库类型

        /// <summary>
        /// 加载真正有效的配置类
        /// </summary>
        /// <returns></returns>
        public static BaseConfigInfo LoadRealConfig()
        {
            ConfigInfo = DefaultConfigFileManager.LoadConfig(ref m_fileoldchange, ConfigFilePath, ConfigInfo, false);
            return ConfigInfo as BaseConfigInfo;
        }


因此,我还是怀疑没能正常加载到dnt.config,楼主说到整合了登陆,整合是否放到了别的位置?如果还是没找到原因,能否详细说说你的整合,以及相关文件的存放位置
firedlove - 2008-2-17 22:25:00
我也碰到了  晕
atlolo - 2008-5-9 17:12:00
今天也遇到了一次
1
查看完整版本: 请检查DNT.config中Dbtype节点数据库类型是否正确