笔记--随时更新
一、电脑先安装SqlServer2008,后安装SqlServer2014
在通过公司封装的Lnd.BaseOper(其内部是通过OLEDBConnection实现的)去访问SqlServer2014的数据库会报错,因为如果先安装2008,再安装2014,导致sqlexpress实例占用了1433端口,2014的实例MSSQLSERVER只能使用动态端口。
可以在SqlServer2014配置管理器中修改端口,如果没有配置为1433端口,在访问时需要添加端口号。使用SqlConnection则不需要配置端口号。
我的电脑目前情况时: sqlserver2008, sqlexpress实例,1444端口
sqlserver2014,MSSQLSERVER,1433端口
二、一个解决方案,多个项目,其中一个为主项目,在主项目的引用中添加其他项目生成的dll。同时将主项目的输出路径设置为网站目录dll文件所在的文件夹,引用的其他项目的dll要设置为复制到本地,实现dll文件的动态更新。
在调试时,首先加断点,加完断点以后重新生成整个解决方案。浏览器端刷新站点,然VS中选择调试--附加到进程w3wp.exe,应用程序池与IIS中网站的应用程序池相同,如此即可进入断点
三、Lnd.BaseOper.CBaseOleDb 的数据源连接字符串中Provider有三种类型,分别是SQLOLEDB,代表Access数据库。SQLOLEDB.1,代表SqlServer数据库。OraOLEDB.Oracle.1代表Oracle数据库。
Lnd.BaseOper主要用于操作数据库,Lnd.BaseGISOper主要用于操作图层
四、ORALCE设置字段自增
create sequence SEQ_Userinf start with 1 increment by 1
nomaxvalue
nominvalue
nocache;
CREATE OR REPLACE TRIGGER tg_test
BEFORE INSERT ON BDC_ZDYTQLXX
FOR EACH ROW WHEN (new.ID0 is null)
begin
select SEQ_Userinf.nextval into:new.ID0 from dual;
end;
五、devexpress灵活使用LayoutControlGroup和GroupControl可以设计出自由放大,拉伸的界面
六、gridControlFieldName和Name是不同的,使用datasource绑定时绑定的是FieldName
七、Oracle实时监听刚刚执行的sql语句
select t.SQL_TEXT,t.LAST_ACTIVE_TIME,t.MODULE from v$sql t
where t.LAST_ACTIVE_TIME>(sysdate - interval '2' MINUTE) --执行10分钟内的SQL语句
and (t.MODULE is null or t.MODULE not like '%PL/SQL%') --不是在某些终端里的执行
and lower(t.SQL_TEXT) like '%update%' OR lower(t.SQL_TEXT) like '%select%' OR lower(t.SQL_TEXT) like '%insert%' OR lower(t.SQL_TEXT) like '%delete%'--查询某类SQL语句
order by t.MODULE DESC,t.LAST_ACTIVE_TIME DESC
八、SqlServer可以使用SQL Server Proflier工具进行分析,在事件选择中如下图设置,监听sql语句执行情况
九、Lnd.BaseOper.dll源码学习
CopyData_Shp复制shp文件
AddSet方法
十、创建一个临时简单要素类并用另一个简单要素类的字段结构
#region 提取后的不动产宗地简单要素类sfcTemp,字段结构与自然资源宗地图层一致
//创建临时简单要素类
DataBase _dbTem = DataBase.OpenTempDB();
SFeatureCls sfcTemp = new SFeatureCls(_dbTem);
if (_dbTem == null || sfcTemp == null)
{
DebugTool.yDebugStr("临时数据库创建失败,宗地图形导入终止");
return;
}
int nClsIDTem = 0;
Guid guidTem = Guid.NewGuid();
string strNewClsNameSrc = "Temp_" + guidTem.ToString();
nClsIDTem = _dbTem.XClsIsExist(XClsType.SFCls, strNewClsNameSrc);
if (nClsIDTem > 0)
{
SFeatureCls.Remove(_dbTem, nClsIDTem);
}
string strClsUrlSrc = string.Format("{0}/sfcls/{1}", _dbTem.URL, strNewClsNameSrc);
nClsIDTem = sfcTemp.Create(strClsUrlSrc, GeomType.Reg);
if (nClsIDTem < 0)
{
DebugTool.yDebugStr("临时简单要素类创建失败,宗地图形导入终止");
return;
}
//临时简单要素类属性结构设置,字段结构与自然资源宗地图层一致
RecordSet rcdsetZrzyZD = sfcZrzyZD.Select(null);
if (rcdsetZrzyZD != null)
{
RecordSet rcdsetTemp = sfcTemp.Select(null);
Fields fldsS = rcdsetZrzyZD.Fields;
Fields fldsD = rcdsetTemp.Fields;
if (fldsS != null && fldsS.Count > 0 && fldsD != null)
{
for (int x = 0; x < fldsS.Count; x++)
{
Field fldS = fldsS[x];
fldsD.AppendField(fldS);
}
sfcTemp.Fields = fldsD;
}
}
#endregion
十一、自然资源连接政务数据源
COtherDS cOtherDS = new COtherDS();
string strConn = cOtherDS.GetOfficeDsConnectStr();
cOtherDS.Close();
CBaseOleDb oleDbZd = new CBaseOleDb("BDC_ZDXX", strConn);
CBaseOleDb oleDbZsx = new CBaseOleDb("BDC_ZSX", strConn);
if (oleDbZd == null || oleDbZd.m_bTblOpen == false)
{
DebugTool.yDebugStrTime("连接BDC_ZDXX表失败!");
XtraMessageBox.Show("连接BDC_ZDXX表失败!");
return 0;
}
#region 2017-06-20-支持分库的政务数据源获取修改---统一接口调用便于统一修改
string strCon = AlterCommonOper.GetOfficeConnStr();
#endregion
ZrZyBaseOper.GetOfficeDsnInfo()
十二、有则Insert,无则Update
SQLSERVER
if not exists (select id,abc,def from A_TEST where id = 'A' and abc = 'B')
INSERT INTO A_TEST (id,abc,def,ddd) VALUES('A','B','C','D')
else update A_TEST set id = 'A',abc='B' ,def='def',ddd='ddd' where id = 'A' and abc = 'B'
ORACLE
string.Format("MERGE INTO ZRZY_CONFIG a USING (select count(*) co from ZRZY_CONFIG where ZRZY_CONFIG.参数描述='宗地URL') b ON(b.co<>0) WHEN MATCHED THEN UPDATE SET a.参数值 = '{0}' where a.参数描述='宗地URL' WHEN NOT MATCHED THEN INSERT VALUES ('宗地URL', '{1}')", strZdUrl, strZdUrl);
十三、拼接自然资源登记单元号时获得对应自然资源类型的备注
AlterCommonOper.GetBZByCode() //这个方法访问的是政务数据源中的ZRZY_CODETBL表
自动编号
Lnd.ZrzyBase.AutoNumber.CreateNumber() //我自己改了针对自然资源登记单元的自动编号,拼接自然资源登记单元号时不读取配置文件中的ZRZYDYLX信息。该方法针对地类图斑图层应该是没有问题的
Lnd.MGAlter.AutoNumber.CteateNumber()
Lnd.MGAlter.AutoNumber.CreateNumberNew() //针对自然资源登记单元号的自动编号做了修正
BaseFunc.ReSetTbGLTBBSM()关联图斑标识码编号
KeyValuePair
在单元属性变更界面更改单元属性,只能保存到图形属性表,不会保存到政务数据源中
在登记单元调查表界面更改单元属性,不仅能保存到图形属性表中,还能保存到政务数据源中.
在登记单元调查表界面一旦点击保存,则在政务数据源中ZRZY_DYXX表会插入该登记单元的一条记录。之后点击该登记单元弹出登记单元调查表界面会优先读取政务数据源中的记录。导致在单元属性变更界面更改单元属性的单元属性在登记单元调查表中无法看到。
十四、datatable存储为xml
DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable();
dataSet.Tables.Add(dataTable);
dataSet.WriteXml("123.xml");
十五、读取xml到datatable
DataSet dataSet = new DataSet();
dataSet.ReadXml("123.xml");
DataTable dataTable = dataSet.Tables[0];
十六、GApp.g_driverobj.m_AoInfo.m_strActName可以获取当前执行的菜单名
十七、获得当前专题的特定图层
m_strFlagPath = Lnd.BaseOper.BaseOperate.GetMainConfigPath() + "\\template\\Flag.ini";
m_mapControl = BaseGlobalOper.lndGetCurMapCtrl(BaseGlobalOper.lndGetCurApplication());
if (m_mapControl != null)
{
m_map = m_mapControl.ActiveMap;
//m_sfclsCurFwLayer = BaseMapOper.lndMapGetsfcls(m_map, "房屋");
#region //2016-06-03 潘艳龙-维护地上宗地的房屋属性,在地下宗地发生改变时会影响地上宗地房屋属性的情况
String strCurFw;
String strSubjectIni = Lnd.Subject.LndSysSubject.GetSysSubjectIni();
System.Text.StringBuilder temp = new System.Text.StringBuilder(255);
Lnd.BaseOper.BaseOperate.GetPrivateProfileString("专题管理", "房屋", "", temp, 255, strSubjectIni);
strCurFw = temp.ToString();
m_sfclsCurFwLayer = BaseMapOper.lndMapGetsfcls(m_map, strCurFw);
#endregion
}