예제 #1
0
파일: database.cs 프로젝트: paopaofeng/dp2
        // 得到浏览格式内存对象
        // parameters:
        //      strBrowseName   浏览文件的文件名或者全路径
        //                      例如 cfgs/browse 。因为已经是在特定的数据库中获得配置文件,所以无需指定库名部分
        // return:
        //      -1  error
        //      0   not found
        //      1   found
        public int GetBrowseCfg(
            string strBrowseName,
            out BrowseCfg browseCfg,
            out string strError)
        {
            strError = "";
            browseCfg = null;

            strBrowseName = strBrowseName.ToLower();
            /*
            if (this.m_bHasBrowse == false)
                return 0;
             * */

            /*
            // 已存在时
            if (this.m_browseCfg != null)
            {
                browseCfg = this.m_browseCfg;
                return 0;
            }
             * */
            browseCfg = (BrowseCfg)this.browse_table[strBrowseName];
            if (browseCfg != null)
            {
                return 1;
            }

/*
            string strDbName = this.GetCaption("zh");

            // strDbName + "/cfgs/browse"
 * */
            string strBrowsePath = this.GetCaption("zh") + "/" + strBrowseName;

            string strBrowseFileName = "";
            // return:
            //		-1	一般性错误,比如调用错误,参数不合法等
            //		-2	没找到节点
            //		-3	localname属性未定义或为值空
            //		-4	localname在本地不存在
            //		-5	存在多个节点
            //		0	成功
            int nRet = this.container.GetFileCfgItemLocalPath(strBrowsePath,
                out strBrowseFileName,
                out strError);
            if (nRet == -2 || nRet == -4)
            {
                // this.m_bHasBrowse = false;
                return 0;
            }
            else
            {
                // this.m_bHasBrowse = true;
            }

            if (nRet != 0)
            {
                return -1;
            }


            browseCfg = new BrowseCfg();
            nRet = browseCfg.Initial(strBrowseFileName,
                this.container.BinDir,
                out strError);
            if (nRet == -1)
            {
                browseCfg = null;
                return -1;
            }

            this.browse_table[strBrowseName] = browseCfg;
            return 1;
        }
예제 #2
0
파일: database.cs 프로젝트: renyh1013/dp2
        // 写配置文件
        // parameters:
        //      strCfgItemPath  全路径,带库名
        // return:
        //		-1  一般性错误
        //      -2  时间戳不匹配
        //		0	成功
        // 线程,对库集合是不安全的
        internal int WriteFileForCfgItem(string strCfgItemPath,
            string strFilePath,
            string strRanges,
            long lTotalLength,
            byte[] baSource,
            Stream streamSource,
            string strMetadata,
            string strStyle,
            byte[] baInputTimestamp,
            out byte[] baOutputTimestamp,
            out string strError)
        {
            //**********对数据库加写锁**************
            this.m_lock.AcquireWriterLock(m_nTimeOut);
#if DEBUG_LOCK
			this.container.WriteDebugInfo("Dir(),对'" + this.GetCaption("zh-cn") + "'数据库加写锁。");
#endif
            try
            {
                // return:
                //		-1	一般性错误
                //		-2	时间戳不匹配
                //		0	成功
                int nRet = this.container.WriteFileForCfgItem(strFilePath,
                    strRanges,
                    lTotalLength,
                    baSource,
                    streamSource,
                    strMetadata,
                    strStyle,
                    baInputTimestamp,
                    out baOutputTimestamp,
                    out strError);
                if (nRet <= -1)
                    return nRet;

                int nPosition = strCfgItemPath.IndexOf("/");
                if (nPosition == -1)
                {
                    strError = "'" + strCfgItemPath + "'路径不包括'/',不合法。";
                    return -1;
                }
                if (nPosition == strCfgItemPath.Length - 1)
                {
                    strError = "'" + strCfgItemPath + "'路径最后是'/',不合法。";
                    return -1;
                }
                string strPathWithoutDbName = strCfgItemPath.Substring(nPosition + 1);
                // 如果为keys对象,则把该库的KeysCfg中的dom清空
                if (strPathWithoutDbName == "cfgs/keys")
                {
                    this.m_keysCfg = null;
                }

                // 如果为browse对象
                if (strPathWithoutDbName == "cfgs/browse")
                {
                    this.m_browseCfg = null;
                    this.m_bHasBrowse = true; // 缺省值
                }

                return 0;
            }
            finally
            {
                //**********对数据库解写锁**************
                this.m_lock.ReleaseWriterLock();
#if DEBUG_LOCK
			this.container.WriteDebugInfo("Dir(),对'" + this.GetCaption("zh-cn") + "'数据库解写锁。");
#endif
            }

        }
예제 #3
0
파일: database.cs 프로젝트: renyh1013/dp2
        // 得到浏览格式内存对象
        // 当return 0时,可能browseCfg为null
        public int GetBrowseCfg(out BrowseCfg browseCfg,
            out string strError)
        {
            strError = "";
            browseCfg = null;

            if (this.m_bHasBrowse == false)
                return 0;

            // 已存在时
            if (this.m_browseCfg != null)
            {
                browseCfg = this.m_browseCfg;
                return 0;
            }

            string strBrowseFileName = "";
            string strDbName = this.GetCaption("zh");
            // return:
            //		-1	一般性错误,比如调用错误,参数不合法等
            //		-2	没找到节点
            //		-3	localname属性未定义或为值空
            //		-4	localname在本地不存在
            //		-5	存在多个节点
            //		0	成功
            int nRet = this.container.GetFileCfgItemLacalPath(strDbName + "/cfgs/browse",
                out strBrowseFileName,
                out strError);
            if (nRet == -2 || nRet == -4)
            {
                this.m_bHasBrowse = false;
                return 0;
            }
            else
            {
                this.m_bHasBrowse = true;
            }

            if (nRet != 0)
            {
                return -1;
            }

            this.m_browseCfg = new BrowseCfg();
            nRet = this.m_browseCfg.Initial(strBrowseFileName,
                this.container.BinDir,
                out strError);
            if (nRet == -1)
            {
                this.m_browseCfg = null;
                return -1;
            }

            browseCfg = this.m_browseCfg;
            return 0;
        }
예제 #4
0
파일: database.cs 프로젝트: renyh1013/dp2
        // 设置数据库的基本信息
        // parameters:
        //		logicNames	        LogicNameItem数组,用新的逻辑库名数组替换原来的逻辑库名数组
        //		strType	            数据库类型,以逗号分隔,可以是file,accout,目前无效,因为涉及到是文件库,还是sql库的问题
        //		strSqlDbName	    指定的新Sql数据库名称,目前无效,,如果数据库为文为文件型数据库,则返回数据源目录的名称
        //		strkeysDefault	    keys配置信息
        //		strBrowseDefault	browse配置信息
        // return:
        //		-1	出错
        //      -2  已存在同名的数据库
        //		0	成功
        public int SetInfo(LogicNameItem[] logicNames,
            string strType,
            string strSqlDbName,
            string strKeysText,
            string strBrowseText,
            out string strError)
        {
            strError = "";

            //****************对数据库加写锁***********
            m_TailNolock.AcquireWriterLock(m_nTimeOut);
#if DEBUG_LOCK
			this.container.WriteDebugInfo("SetInfo(),对'" + this.GetCaption("zh-cn") + "'数据库加写锁。");

#endif
            try
            {
                if (strKeysText == null)
                    strKeysText = "";
                if (strBrowseText == null)
                    strBrowseText = "";

                if (strKeysText != "")
                {
                    XmlDocument dom = new XmlDocument();
                    try
                    {
                        dom.LoadXml(strKeysText);
                    }
                    catch (Exception ex)
                    {
                        strError = "加载keys配置文件内容到dom出错,原因:" + ex.Message;
                        return -1;
                    }
                }
                if (strBrowseText != "")
                {
                    XmlDocument dom = new XmlDocument();
                    try
                    {
                        dom.LoadXml(strBrowseText);
                    }
                    catch (Exception ex)
                    {
                        strError = "加载browse配置文件内容到dom出错,原因:" + ex.Message;
                        return -1;
                    }
                }

                // 可以一个逻辑库名也没有,不出错
                string strLogicNames = "";
                for (int i = 0; i < logicNames.Length; i++)
                {
                    string strLang = logicNames[i].Lang;
                    string strLogicName = logicNames[i].Value;

                    if (strLang.Length != 2
                        && strLang.Length != 5)
                    {
                        strError = "语言版本字符串长度只能是2位或者5位,'" + strLang + "'语言版本不合法";
                        return -1;
                    }

                    if (this.container.IsExistLogicName(strLogicName, this) == true)
                    {
                        strError = "数据库中已存在'" + strLogicName + "'逻辑库名";
                        return -2;
                    }
                    strLogicNames += "<caption lang='" + strLang + "'>" + strLogicName + "</caption>";
                }

                // 修改LogicName,使用全部替换的方式
                XmlNode nodeLogicName = this.m_propertyNode.SelectSingleNode("logicname");
                nodeLogicName.InnerXml = strLogicNames;


                // 目前不支持修改strType,strSqlDbName

                string strKeysFileName = "";//this.GetFixedCfgFileName("keys");
                string strDbName = this.GetCaption("zh");
                // return:
                //		-1	一般性错误,比如调用错误,参数不合法等
                //		-2	没找到节点
                //		-3	localname属性未定义或为值空
                //		-4	localname在本地不存在
                //		-5	存在多个节点
                //		0	成功
                int nRet = this.container.GetFileCfgItemLacalPath(strDbName + "/cfgs/keys",
                    out strKeysFileName,
                    out strError);
                if (nRet != 0)
                {
                    if (nRet != -2 && nRet != -4)
                        return -1;
                    else if (nRet == -2)
                    {
                        // return:
                        //		-1	出错
                        //		0	成功
                        nRet = this.container.SetFileCfgItem(this.GetCaption("zh") + "/cfgs",
                            null,
                            "keys",
                            out strError);
                        if (nRet == -1)
                            return -1;

                        // return:
                        //		-1	一般性错误,比如调用错误,参数不合法等
                        //		-2	没找到节点
                        //		-3	localname属性未定义或为值空
                        //		-4	localname在本地不存在
                        //		-5	存在多个节点
                        //		0	成功
                        nRet = this.container.GetFileCfgItemLacalPath(this.GetCaption("zh") + "/cfgs/keys",
                            out strKeysFileName,
                            out strError);
                        if (nRet != 0)
                        {
                            if (nRet != -4)
                                return -1;
                        }
                    }
                }

                if (File.Exists(strKeysFileName) == false)
                {
                    Stream s = File.Create(strKeysFileName);
                    s.Close();
                }

                nRet = DatabaseUtil.CreateXmlFile(strKeysFileName,
                    strKeysText,
                    out strError);
                if (nRet == -1)
                    return -1;

                // 把缓冲清空
                this.m_keysCfg = null;



                string strBrowseFileName = "";

                // return:
                //		-1	一般性错误,比如调用错误,参数不合法等
                //		-2	没找到节点
                //		-3	localname属性未定义或为值空
                //		-4	localname在本地不存在
                //		-5	存在多个节点
                //		0	成功
                nRet = this.container.GetFileCfgItemLacalPath(strDbName + "/cfgs/browse",
                    out strBrowseFileName,
                    out strError);
                if (nRet != 0)
                {
                    if (nRet != -2 && nRet != -4)
                        return -1;
                    else if (nRet == -2)
                    {
                        // return:
                        //		-1	出错
                        //		0	成功
                        nRet = this.container.SetFileCfgItem(this.GetCaption("zh") + "/cfgs",
                            null,
                            "browse",
                            out strError);
                        if (nRet == -1)
                            return -1;

                        // return:
                        //		-1	一般性错误,比如调用错误,参数不合法等
                        //		-2	没找到节点
                        //		-3	localname属性未定义或为值空
                        //		-4	localname在本地不存在
                        //		-5	存在多个节点
                        //		0	成功
                        nRet = this.container.GetFileCfgItemLacalPath(this.GetCaption("zh") + "/cfgs/browse",
                            out strBrowseFileName,
                            out strError);
                        if (nRet != 0)
                        {
                            if (nRet != -4)
                                return -1;
                        }
                    }
                }

                if (File.Exists(strBrowseFileName) == false)
                {
                    Stream s = File.Create(strBrowseFileName);
                    s.Close();
                }

                nRet = DatabaseUtil.CreateXmlFile(strBrowseFileName,
                    strBrowseText,
                    out strError);
                if (nRet == -1)
                    return -1;

                // 把缓冲清空
                this.m_browseCfg = null;
                this.m_bHasBrowse = true; // 缺省值


                return 0;
            }
            finally
            {
                //***************对数据库解写锁************
                m_TailNolock.ReleaseWriterLock();
#if DEBUG_LOCK
				this.container.WriteDebugInfo("SetInfo(),对'" + this.GetCaption("zh-cn") + "'数据库解写锁。");
#endif
            }
        }