private void comboBoxArea_Click(object sender, EventArgs e) { GeoDataCenterDbFun dbfun = new GeoDataCenterDbFun(); GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"; //生成连接数据库字符串 frmDataUnitTree frm = new frmDataUnitTree(); //初始化数据单元树窗体 frm.Location = new Point(this.Location.X + 45, this.Location.Y + 140); frm.flag = 2; frm.ShowDialog(); if (Node != null)//传回的Node不是NULL { if (Convert.ToInt32(Node.Tag) != 0) { string strExp = "select 行政代码 from 数据单元表 where 行政名称='" + Node.Text + "' and 数据单元级别='" + Node.Tag + "'"; string code = dbfun.GetInfoFromMdbByExp(strCon, strExp); comboBoxArea.Text = Node.Text + "(" + code + ")";//为数据单元box显示数据 } else { comboBoxArea.Text = Node.Text;//为数据单元box显示数据 } } }
//删除文档 private void btn_Del_Click(object sender, EventArgs e) { bool flag = false; GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strExp = "select 路径 from 文档数据源信息表 where 虚拟目录名='" + comboBoxCatalog.Text + "'"; string path = db.GetInfoFromMdbByExp(strCon, strExp); foreach (DataGridViewRow row in datagwSource.Rows) { if ((bool)row.Cells[0].EditedFormattedValue == true) { flag = true; } } if (!flag) { MessageBox.Show("没有选中行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } try { string cellvalue = ""; foreach (DataGridViewRow row in datagwSource.Rows) { if ((bool)row.Cells[0].EditedFormattedValue == true) { cellvalue = row.Cells[1].Value.ToString().Trim(); strExp = "select * from 文档入库信息表 where 文档名称='" + cellvalue + "' and 文档虚拟目录='" + comboBoxCatalog.Text + "'"; DataTable dt = db.GetDataTableFromMdb(strCon, strExp); string dir = path + "\\" + dt.Rows[0]["年度"] + dt.Rows[0]["专题类型"] + dt.Rows[0]["行政代码"] + "\\" + cellvalue + "." + dt.Rows[0]["文档类型"]; if (File.Exists(dir)) { File.Delete(dir); dir = dir.Substring(0, dir.LastIndexOf("\\")); if (Directory.GetFiles(dir).Length == 0)//如果该目录中没有其他文档,则删除该目录 { Directory.Delete(dir); } strExp = "delete * from 文档入库信息表 where 文档名称='" + cellvalue + "' and 文档虚拟目录='" + comboBoxCatalog.Text + "'"; db.ExcuteSqlFromMdb(strCon, strExp); } } } datagwSource.Rows.Clear(); LoadGridView();//重新加载数据 MessageBox.Show("删除成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
public string GetDescrib(string str) { GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 string strExp = "select 描述 from 标准图层信息表 where 代码='" + str + "'"; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strreturn = db.GetInfoFromMdbByExp(strCon, strExp); return(strreturn); }
private void comboBoxSource_TextChanged(object sender, EventArgs e) { textBoxPath.Text = ""; if (comboBoxSource.Text.Trim() != "") { GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string strExp = "select 路径 from 文档数据源信息表 where 虚拟目录名='" + comboBoxSource.Text + "'"; string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 GeoDataCenterDbFun db = new GeoDataCenterDbFun(); textBoxPath.Text = db.GetInfoFromMdbByExp(strCon, strExp); } }
//得到数据库用户 private string GetSourceUser(string str) { try { GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 string strExp = "select 用户 from 物理数据源表 where 数据源名称='" + str + "'"; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strname = db.GetInfoFromMdbByExp(strCon, strExp); return(strname); } catch { return(""); } }
//修改 private void datagwSource_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex == -1 || e.ColumnIndex != 1) { return; } //IWorkspaceFactory Pwf = new FileGDBWorkspaceFactoryClass(); //pWorkspace = (IWorkspace)(Pwf.OpenFromFile(GetSourcePath(comboBoxSource.Text), 0)); pWorkspace = GetWorkspace(comboBoxSource.Text); if (pWorkspace != null) { pWorkspace2 = (IWorkspace2)pWorkspace; m_endstr = datagwSource.Rows[e.RowIndex].Cells[1].Value.ToString(); if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, m_endstr)) { MessageBox.Show("命名名称已存在,请修改", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); datagwSource.Rows[e.RowIndex].Cells[1].Value = m_startstr; return; } if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, m_startstr)) { IFeatureClass tmpfeatureclass; IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace; tmpfeatureclass = pFeatureWorkspace.OpenFeatureClass(m_startstr); IDataset set = tmpfeatureclass as IDataset; set.Rename(m_endstr); EditSql(m_startstr, m_endstr); //更改代码 实时更新图层描述 GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"; //生成连接数据库字符串 string player = m_endstr.Substring(15); //图层组成 string strExp = "select 描述 from 标准图层信息表 where 代码='" + player + "'"; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string playername = db.GetInfoFromMdbByExp(strCon, strExp); if (playername != "") { datagwSource.Rows[e.RowIndex].Cells[2].Value = playername; } //listBoxDetail.Items.Add("将" + m_startstr); //listBoxDetail.Items.Add("改为" + m_endstr); //listBoxDetail.Items.Add(" "); MessageBox.Show("修改数据成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
/// <summary> /// 将前缀按照标准表规则化,并组织 /// </summary> /// <param name="str1">前缀</param> /// <param name="str2">图层</param> /// <returns></returns> public string GetForwadName(string str1, string str2) { AnalyseDataToArray(str1); str1 = ""; GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 string strExp = "select 业务大类代码,业务小类代码 from 标准图层信息表 where 代码='" + str2 + "'"; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); DataTable dt = db.GetDataTableFromMdb(strCon, strExp); if (dt.Rows.Count > 0) { array[0] = dt.Rows[0]["业务大类代码"].ToString(); array[2] = dt.Rows[0]["业务小类代码"].ToString(); } strExp = "select 字段名称 from 图层命名规则表"; string strname = db.GetInfoFromMdbByExp(strCon, strExp); string[] arrName = strname.Split('+');//分离字段名称 for (int i = 0; i < arrName.Length; i++) { switch (arrName[i]) { case "业务大类代码": str1 += array[0]; break; case "年度": str1 += array[1]; break; case "业务小类代码": str1 += array[2]; break; case "行政代码": str1 += array[3]; break; case "比例尺": str1 += array[4]; break; } } str1 += str2; return(str1); }
/// <summary> /// 将数据分析成字符串数组 /// </summary> /// <param name="filename">数据名称</param> public void AnalyseDataToArray(string filename) { if (filename.Contains("."))//针对SDE 用户名.图层名格式的 { filename = filename.Substring(filename.LastIndexOf(".") + 1); } GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 string strExp = "select 字段名称 from 图层命名规则表"; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strname = db.GetInfoFromMdbByExp(strCon, strExp); string[] arrName = strname.Split('+');//分离字段名称 for (int i = 0; i < arrName.Length; i++) { switch (arrName[i]) { case "业务大类代码": array[0] = filename.Substring(0, 2); //业务大类代码 filename = filename.Remove(0, 2); break; case "年度": array[1] = filename.Substring(0, 4); //年度 filename = filename.Remove(0, 4); break; case "业务小类代码": array[2] = filename.Substring(0, 2); //业务小类代码 filename = filename.Remove(0, 2); break; case "行政代码": array[3] = filename.Substring(0, 6); //行政代码 filename = filename.Remove(0, 6); break; case "比例尺": array[4] = filename.Substring(0, 1); //比例尺 filename = filename.Remove(0, 1); break; } } array[5] = filename;//图层组成 }
private void LoadGirdViewRatster() { GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"; //生成连接数据库字符串 string strExp = "select * from 地图入库信息表"; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); DataTable dt = db.GetDataTableFromMdb(strCon, strExp); DataGridViewButtonCell cell = new DataGridViewButtonCell(); cell.Value = "..."; for (int i = 0; i < dt.Rows.Count; i++) { strExp = "select 描述 from 标准专题信息表 where 专题类型='" + dt.Rows[i]["专题类型"].ToString() + "'"; string name = db.GetInfoFromMdbByExp(strCon, strExp); dataGridView.Rows.Add(new object[] { dt.Rows[i]["专题类型"].ToString(), name, dt.Rows[i]["年度"].ToString(), dt.Rows[i]["行政名称"].ToString(), dt.Rows[i]["比例尺"].ToString(), dt.Rows[i]["影像库"].ToString(), cell }); } }
//点击行政区域 private void comboBoxArea_Click(object sender, EventArgs e) { GeoDataCenterDbFun dbfun = new GeoDataCenterDbFun(); frmDataUnitTree frm = new frmDataUnitTree();//初始化数据单元树窗体 frm.Location = new Point(this.Location.X + 147, this.Location.Y + 80); frm.flag = 0; frm.ShowDialog(); if (Node != null)//传回的Node不是NULL { if (Convert.ToInt32(Node.Tag) != 0) { string strExp = "select 行政代码 from 数据单元表 where 行政名称='" + Node.Text + "' and 数据单元级别='" + Node.Tag + "'"; string code = dbfun.GetInfoFromMdbByExp(m_con, strExp); comboBoxArea.Text = Node.Text + "(" + code + ")";//为数据单元box显示数据 } } }
/// <summary> /// 组织前缀 added by xs 20110415 /// </summary> /// <param name="str1">业务大类</param> /// <param name="str2">年度</param> /// <param name="str3">业务小类</param> /// <param name="str4">行政代码</param> /// <param name="str5">比例尺</param> /// <returns></returns> public string GetLayerName(string str1, string str2, string str3, string str4, string str5) { string layername = ""; GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 string strExp = "select 字段名称 from 图层命名规则表"; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strname = db.GetInfoFromMdbByExp(strCon, strExp); string[] arrName = strname.Split('+');//分离字段名称 for (int i = 0; i < arrName.Length; i++) { switch (arrName[i]) { case "业务大类代码": layername += str1; break; case "年度": layername += str2; break; case "业务小类代码": layername += str3; break; case "行政代码": layername += str4; break; case "比例尺": layername += str5; break; } } return(layername); }
private void btnOK_Click(object sender, EventArgs e) { string physicdir = ""; string strExp; GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据 GeoDataCenterDbFun db = new GeoDataCenterDbFun(); if (comboBoxScale.Text == "" || comboBoxArea.Text == "" || comboBoxYear.Text == "" || comboBoxType.Text == "") { MessageBox.Show("各选项不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } string strscale = GetCode(comboBoxScale.Text); //获得比例尺代码 string strType = GetCode(comboBoxType.Text); //获得专题类型 string strArea = GetCode(comboBoxArea.Text); //获得区域代码 string strAreaname = comboBoxArea.Text.Substring(0, comboBoxArea.Text.LastIndexOf('(')); //获得区域名称 //年度 专题 行政区代码 要按照规则替换 string dir = comboBoxYear.Text + strType + strArea; if (m_soucedir != comboBoxSource.Text) { strExp = "select 路径 from 文档数据源信息表 where 虚拟目录名='" + comboBoxSource.Text + "'"; physicdir = db.GetInfoFromMdbByExp(strCon, strExp) + @"\" + dir;//路径 } else { physicdir = comboBoxSource.Text + @"\" + dir;//路径 } if (!Directory.Exists(physicdir)) { Directory.CreateDirectory(physicdir); } foreach (ListViewItem item in listViewDoc.Items) { try { //string[] str = item.Text.Split('.'); string strfile = item.Text.Substring(item.Text.LastIndexOf("\\") + 1); string[] strBuffer = strfile.Split('.'); string strFileName = strBuffer[0].ToString(); string strFileType = strBuffer[1].ToString(); if (item.Checked && item.SubItems[1].Text == "等待入库") { item.SubItems[1].Text = "正在入库"; listViewDoc.Refresh(); if (File.Exists(item.Text)) { File.Copy(item.Text, physicdir + "\\" + strfile, true); } strExp = string.Format("insert into 文档入库信息表 (行政代码,行政名称,年度,比例尺,专题类型,文档名称,文档类型,文档虚拟目录,处理) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')", strArea, strAreaname, comboBoxYear.Text, strscale, strType, strFileName, strFileType, comboBoxSource.Text, comboBoxOpen.SelectedIndex.ToString()); db.ExcuteSqlFromMdb(strCon, strExp); item.SubItems[1].Text = "入库完成"; } } catch (Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); item.SubItems[1].Text = "入库失败"; } } MessageBox.Show("操作已完成", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }
/// <summary> /// 根据列表框选择状态动态显示GirdView /// </summary> private void ChangeGridView() { this.Cursor = Cursors.WaitCursor; string strall = ""; datagwSource.Rows.Clear(); bool state = true; string player = ""; GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); //path = GetSourcePath(comboBoxSource.Text); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"; //生成连接数据库字符串 string str_Exp = ""; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); //if (Directory.Exists(@path)) //{ //IWorkspaceFactory Pwf = new FileGDBWorkspaceFactoryClass(); pWorkspace = GetWorkspace(comboBoxSource.Text); if (pWorkspace == null) { this.Cursor = Cursors.Default; MessageBox.Show("数据源空间不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } IEnumDataset enumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass) as IEnumDataset; IDataset dataset = enumDataset.Next(); //遍历mdb的每一个独立要素类 while (dataset != null) { state = true; //IFeatureClass pFeatureClass = dataset as IFeatureClass; //player = pFeatureClass.AliasName; player = dataset.Name; if (pWorkspace.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) //如果SDE去掉用户名前缀 { Int32 userlenth = pWorkspace.ConnectionProperties.GetProperty("USER").ToString().Length; player = player.Substring(userlenth + 1); } AnalyseDataToArray(player); //解析数据 //MessageBox.Show(array[1] + "," + comboBoxYear.Items[m_state[0]].ToString()); if (m_state[0] != 0 && array[1] != (comboBoxYear.Items[m_state[0]].ToString())) { state = false; dataset = enumDataset.Next(); continue; } if (Node != null && Convert.ToInt32(Node.Tag) != 0 && comboBoxArea.Text.Trim() != "所有行政区") { int tag = Convert.ToInt32(Node.Tag); strall = comboBoxArea.Text.ToString(); string[] area = strall.Split('(', ')'); switch (tag) { case 1: if (array[3].Substring(0, 3) != area[1].Substring(0, 3)) //省级节点取前三位 { state = false; dataset = enumDataset.Next(); continue; } break; case 2: if (array[3].Substring(0, 4) != area[1].Substring(0, 4)) //市级节点取前四位 { state = false; dataset = enumDataset.Next(); continue; } break; case 3: if (array[3] != area[1]) { state = false; dataset = enumDataset.Next(); continue; } break; } //if (!array[3].Contains(area[1])) //{ // state = false; dataset = enumDataset.Next(); continue; //} } if (m_state[2] != 0) { strall = comboBoxScale.Items[m_state[2]].ToString(); string[] scale = strall.Split('(', ')'); //str_Exp = "select 代码 from 比例尺代码表 where 描述='" + comboBoxScale.Items[m_state[2]].ToString() + "'"; //string scale = db.GetInfoFromMdbByExp(strCon, str_Exp); if (array[4] != scale[1]) { state = false; dataset = enumDataset.Next(); continue; } } if (m_state[3] != 0) //业务大类 { strall = comboBoxBig.Items[m_state[3]].ToString(); string[] type = strall.Split('(', ')'); //str_Exp = "select 专题类型 from 标准专题信息表 where 描述='" + comboBoxType.Items[m_state[3]].ToString() + "'"; //string type= db.GetInfoFromMdbByExp(strCon, str_Exp); if (array[0] != type[1]) { state = false; dataset = enumDataset.Next(); continue; } } if (m_state[4] != 0) //业务小类 { strall = comboBoxSub.Items[m_state[4]].ToString(); string[] type = strall.Split('(', ')'); //str_Exp = "select 专题类型 from 标准专题信息表 where 描述='" + comboBoxType.Items[m_state[3]].ToString() + "'"; //string type= db.GetInfoFromMdbByExp(strCon, str_Exp); if (array[2] != type[1]) { state = false; dataset = enumDataset.Next(); continue; } } str_Exp = "select 描述 from 标准图层信息表 where 代码='" + array[5] + "'"; string playername = db.GetInfoFromMdbByExp(strCon, str_Exp); if (playername != "") { array[5] = playername; } if (state) { datagwSource.Rows.Add(new object[] { true, player, array[5] }); } dataset = enumDataset.Next(); } this.Cursor = Cursors.Default; //} //else //{ // this.Cursor = Cursors.Default; // MessageBox.Show("数据源路径不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); //} }
//下载文档 private void btn_Export_Click(object sender, EventArgs e) { bool flag = false; GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strExp = "select 路径 from 文档数据源信息表 where 虚拟目录名='" + comboBoxCatalog.Text + "'"; string path = db.GetInfoFromMdbByExp(strCon, strExp); foreach (DataGridViewRow row in datagwSource.Rows) { if ((bool)row.Cells[0].EditedFormattedValue == true) { flag = true; } } if (!flag) { MessageBox.Show("没有选中行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } SysCommon.CProgress vProgress = new SysCommon.CProgress("正在下载选中文档"); try { FolderBrowserDialog dlg = new FolderBrowserDialog(); if (dlg.ShowDialog() == DialogResult.OK) { //初始化进度条 vProgress.EnableCancel = false; vProgress.ShowDescription = true; vProgress.FakeProgress = true; vProgress.TopMost = true; vProgress.ShowProgress(); string cellvalue = ""; foreach (DataGridViewRow row in datagwSource.Rows) { if ((bool)row.Cells[0].EditedFormattedValue == true) { cellvalue = row.Cells[1].Value.ToString().Trim(); strExp = "select * from 文档入库信息表 where 文档名称='" + cellvalue + "' and 文档虚拟目录='" + comboBoxCatalog.Text + "'"; DataTable dt = db.GetDataTableFromMdb(strCon, strExp); string dir = path + "\\" + dt.Rows[0]["年度"] + dt.Rows[0]["专题类型"] + dt.Rows[0]["行政代码"] + "\\" + cellvalue + "." + dt.Rows[0]["文档类型"]; string filepath = dlg.SelectedPath + "\\" + cellvalue + "." + dt.Rows[0]["文档类型"]; if (File.Exists(dir)) { File.Copy(dir, filepath, true); } } } vProgress.Close(); MessageBox.Show("下载成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Activate(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); vProgress.Close(); this.Activate(); } }
private void btnOk_Click(object sender, EventArgs e) { prename = ""; //清空原有数据 array[0] = GetCode(comboBoxBus.Text); //业务大类代码如DZ array[1] = comboBoxYear.Text; //年度如2009 array[2] = GetCode(comboBoxType.Text); //专题代码如01 array[3] = GetCode(comboBoxArea.Text); //区域如420683 array[4] = GetCode(comboBoxScale.Text); //比例尺如G GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据 GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strExp = "select 命名规则 from 图层命名规则表"; string strRegex = db.GetInfoFromMdbByExp(strCon, strExp);//正则表达式 strExp = "select 字段名称 from 图层命名规则表"; string strname = db.GetInfoFromMdbByExp(strCon, strExp); try { string[] arrRegex = strRegex.Split('(', ')'); //分离正则表达式 string[] arrName = strname.Split('+'); //分离字段名称 Regex regex; for (int i = 0; i < arrName.Length; i++) { regex = new Regex(arrRegex[2 * i + 1]); switch (arrName[i]) { case "业务大类代码": if (!regex.IsMatch(array[0])) //匹配业务大类代码 { MessageBox.Show("业务大类代码不符合命名规则!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { prename += array[0]; } break; case "年度": if (!regex.IsMatch(array[1])) //匹配年度 { MessageBox.Show("年度不符合命名规则!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { prename += array[1]; } break; case "业务小类代码": if (!regex.IsMatch(array[2])) //匹配业务小类代码 { MessageBox.Show("业务小类代码不符合命名规则!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { prename += array[2]; } break; case "行政代码": if (!regex.IsMatch(array[3])) //匹配行政代码 { MessageBox.Show("行政代码不符合命名规则!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { prename += array[3]; } break; case "比例尺": if (!regex.IsMatch(array[4])) //匹配比例尺 { MessageBox.Show("比例尺不符合命名规则!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { prename += array[4]; } break; } } } catch { MessageBox.Show("没有命名规则!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //生成前缀 tb.Text = prename; this.Close(); }
/// <summary> /// 检查名称合法性 /// </summary> /// <param name="name">需要检查的名称</param> /// <returns></returns> public bool CheckNames(string name) { if (name.Length < 15 && name.Length > 20) { return(false); } try { GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据 GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strExp = "select 命名规则 from 图层命名规则表"; string strRegex = db.GetInfoFromMdbByExp(strCon, strExp);//正则表达式 strExp = "select 字段名称 from 图层命名规则表"; string strname = db.GetInfoFromMdbByExp(strCon, strExp); string[] arrRegex = strRegex.Split('(', ')'); //分离正则表达式 string[] arrName = strname.Split('+'); //分离字段名称 Regex regex; for (int i = 0; i < arrName.Length; i++) { regex = new Regex(arrRegex[2 * i + 1]); switch (arrName[i]) { case "业务大类代码": if (!regex.IsMatch(name.Substring(0, 2))) //匹配业务大类代码 { return(false); } else { name = name.Remove(0, 2); } break; case "年度": if (!regex.IsMatch(name.Substring(0, 4))) //匹配年度 { return(false); } else { name = name.Remove(0, 4); } break; case "业务小类代码": if (!regex.IsMatch(name.Substring(0, 2))) //匹配业务小类代码 { return(false); } else { name = name.Remove(0, 2); } break; case "行政代码": if (!regex.IsMatch(name.Substring(0, 6))) //匹配行政代码 { return(false); } else { name = name.Remove(0, 6); } break; case "比例尺": if (!regex.IsMatch(name.Substring(0, 1))) //匹配行比例尺 { return(false); } else { name = name.Remove(0, 1); } break; } } return(true); } catch { return(false); } }
//显示全部数据 private void LoadGridView(CProgress vprocess)//重载加载数据函数 { GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string strExp = "select 数据源名称 from 物理数据源表"; string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 GeoDataCenterDbFun db = new GeoDataCenterDbFun(); List <string> list = db.GetDataReaderFromMdb(strCon, strExp); for (int i = 0; i < list.Count; i++) { comboBoxSource.Items.Add(list[i]);//加载数据源列表框 } if (list.Count > 0) { comboBoxSource.SelectedIndex = 0;//默认选择第一个 } string player = ""; string sourename = comboBoxSource.Text.Trim(); strExp = "select * from 数据编码表 where 数据源名称='" + sourename + "'"; DataTable dt = db.GetDataTableFromMdb(strCon, strExp); for (int i = 0; i < dt.Rows.Count; i++) { strExp = "select 字段名称 from 图层命名规则表"; string strname = db.GetInfoFromMdbByExp(strCon, strExp); string[] arrName = strname.Split('+'); //分离字段名称 string layername = ""; player = ""; for (int j = 0; j < arrName.Length; j++) { switch (arrName[j]) { case "业务大类代码": layername += dt.Rows[i]["业务大类代码"].ToString(); //业务大类代码 break; case "年度": layername += dt.Rows[i]["年度"].ToString(); //年度 break; case "业务小类代码": layername += dt.Rows[i]["业务小类代码"].ToString(); //业务小类代码 break; case "行政代码": layername += dt.Rows[i]["行政代码"].ToString(); //行政代码 break; case "比例尺": layername += dt.Rows[i]["比例尺"].ToString(); //比例尺 break; } } layername += dt.Rows[i]["图层代码"].ToString(); strExp = "select 描述 from 标准图层信息表 where 代码='" + dt.Rows[i]["图层代码"].ToString() + "'"; string playername = db.GetInfoFromMdbByExp(strCon, strExp); if (playername != "") { player = playername; } else { player = dt.Rows[i]["图层代码"].ToString(); } string username = GetSourceUser(comboBoxSource.Text).Trim().ToUpper();; if (username != "") { layername = username + "." + layername; } datagwSource.Rows.Add(new object[] { true, layername, player }); } //IWorkspaceFactory Pwf = new FileGDBWorkspaceFactoryClass(); //pWorkspace = (IWorkspace)(Pwf.OpenFromFile(comboBoxSource.Text, 0)); //IEnumDataset enumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass) as IEnumDataset; //IDataset dataset = enumDataset.Next(); ////遍历mdb的每一个独立要素类 //while (dataset != null) //{ // IFeatureClass pFeatureClass = dataset as IFeatureClass; // player = pFeatureClass.AliasName.Substring(15); //strExp = "select 描述 from 标准图层信息表 where 代码='" + player + "'"; //string playername = db.GetInfoFromMdbByExp(strCon, strExp); //if (playername != "") // player = playername; //datagwSource.Rows.Add(new object[] { true, pFeatureClass.AliasName, player }); //dataset = enumDataset.Next(); //} }
//写入数据编码表和地图入库信息表的方法 public bool InsertIntoDatabase(string filename) { bool success; try { if (filename.Contains(".")) { filename = filename.Substring(filename.LastIndexOf(".") + 1);//针对SDE } if (filename.Length > 16) { GetDataTreeInitIndex dIndex = new GetDataTreeInitIndex(); string mypath = dIndex.GetDbInfo(); string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mypath + ";Mode=ReadWrite|Share Deny None;Persist Security Info=False";//生成连接数据库字符串 string strExp = "select 字段名称 from 图层命名规则表"; GeoDataCenterDbFun db = new GeoDataCenterDbFun(); string strname = db.GetInfoFromMdbByExp(strCon, strExp); string[] arrName = strname.Split('+');//分离字段名称 for (int i = 0; i < arrName.Length; i++) { switch (arrName[i]) { case "业务大类代码": array[0] = filename.Substring(0, 2); //业务大类代码 filename = filename.Remove(0, 2); break; case "年度": array[1] = filename.Substring(0, 4); //年度 filename = filename.Remove(0, 4); break; case "业务小类代码": array[2] = filename.Substring(0, 2); //专题 filename = filename.Remove(0, 2); break; case "行政代码": array[3] = filename.Substring(0, 6); //行政代码 filename = filename.Remove(0, 6); break; case "比例尺": array[4] = filename.Substring(0, 1); //比例尺 filename = filename.Remove(0, 1); break; } } array[5] = filename;//图层组成 string sourcename = comboBoxSource.Text.Trim(); strExp = string.Format("select count(*) from 数据编码表 where 业务大类代码='{0}' and 年度='{1}' and 业务小类代码='{2}'and 行政代码='{3}' and 比例尺='{4}' and 图层代码='{5}' and 数据源名称='{6}'", array[0], array[1], array[2], array[3], array[4], array[5], sourcename); GeoDataCenterDbFun dDbFun = new GeoDataCenterDbFun(); int count = dDbFun.GetCountFromMdb(strCon, strExp); if (count != 1) { strExp = string.Format("insert into 数据编码表(业务大类代码,年度,业务小类代码,行政代码,比例尺,图层代码,数据源名称) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", array[0], array[1], array[2], array[3], array[4], array[5], sourcename); dDbFun.ExcuteSqlFromMdb(strCon, strExp); //更新数据编码表 dDbFun.UpdateMdbInfoTable(array[0], array[1], array[2], array[3], array[4]); //更新地图入库信息表 } success = true; } else { m_strErr = "命名不规则,写入数据表失败"; success = false; } } catch (System.Exception e) { MessageBox.Show(e.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); success = false; } return(success); }
//开始分析 private void btn_Analys_Click(object sender, EventArgs e) { SysCommon.CProgress vProgress = new SysCommon.CProgress("开始分析数据"); vProgress.EnableCancel = false; vProgress.ShowDescription = true; vProgress.FakeProgress = true; vProgress.TopMost = true; vProgress.ShowProgress(); try { string strArea = ""; string strArea2 = ""; List <string> strAreaChild = new List <string>(); string strYear = ""; string strScale = ""; string strScale2 = ""; string strExp = ""; bool flat = false; //选了比例尺与否的状态 int index = 0; int ifinish = 0; //显示分析了多少条数据 GeoDataCenterDbFun dbfun = new GeoDataCenterDbFun(); m_list.Clear(); //选择框的8种状态 #region if (comboBoxScale.Text != "" && comboBoxYear.Text != "" && comboBoxArea.Text != "") { index = 1; } else if (comboBoxArea.Text != "" && comboBoxYear.Text != "") { index = 2; } else if (comboBoxArea.Text != "" && comboBoxScale.Text != "") { index = 3; } else if (comboBoxYear.Text != "" && comboBoxScale.Text != "") { index = 4; } else if (comboBoxArea.Text != "") { index = 5; } else if (comboBoxYear.Text != "") { index = 6; } else if (comboBoxScale.Text != "") { index = 7; } else { index = 0; } #endregion if (Node != null && comboBoxArea.Text != "") { string[] arrr = comboBoxArea.Text.Split('(', ')'); strArea2 = arrr[1]; //得到所有该行政区的辖区 switch (Convert.ToInt32(Node.Tag)) { case 1: strArea = "行政代码 like '" + strArea2.Substring(0, 3).Trim() + "*' and "; strExp = "select 行政代码 from 数据单元表 where 行政代码 like '" + strArea2.Substring(0, 3).Trim() + "*'"; break; case 2: strArea = "行政代码 like '" + strArea2.Substring(0, 4).Trim() + "*' and"; strExp = "select 行政代码 from 数据单元表 where 行政代码 like '" + strArea2.Substring(0, 4).Trim() + "*'"; break; case 3: strArea = "行政代码='" + strArea2 + "' and "; strExp = "select 行政代码 from 数据单元表 where 行政代码 = '" + strArea2 + "*'"; break; } strAreaChild = dbfun.GetDataReaderFromMdb(m_con, strExp); } if (comboBoxYear.Text != "") { strYear = "年度='" + comboBoxYear.Text + "' and "; } if (comboBoxScale.Text != "") { string [] arrr = comboBoxScale.Text.Split('(', ')'); strScale2 = arrr[1]; strScale = "比例尺='" + strScale2 + "' and "; //flat = true; } //else // flat = false; //if (flat)//选了比例尺,不用去掉and // strExp = "select ID from 数据编码表 where " + strArea + strYear + strScale + " and 数据源名称='" + GetSourceName(m_path) + "'"; //else if (comboBoxYear.Text != "" ||comboBoxArea.Text != "")//比例尺没有选择,而年度或者行政区划选了,要去掉and //{ //strExp = "select ID from 数据编码表 where " + strArea + strYear + " 数据源名称='" + GetSourceName(m_path) + "'"; //} //else//都没有选择 // strExp = "select ID from 数据编码表 where 数据源名称='" + GetSourceName(m_path) + "'"; strExp = "select ID from 数据编码表 where " + strArea + strYear + strScale + " 数据源名称='" + comboBoxSource.Text.Trim() + "'"; List <string> list = new List <string>(); list = dbfun.GetDataReaderFromMdb(m_con, strExp); // m_path = GetSourcePath(comboBoxSource.Text); for (int i = 0; i < list.Count; i++) { strExp = "delete * from 数据编码表 where ID=" + Convert.ToInt32(list[i]); dbfun.ExcuteSqlFromMdb(m_con, strExp);//从数据编码表删除符合ID条件的行 } m_list = new List <string>(); IWorkspace pWorkspace = GetWorkspace(comboBoxSource.Text); //遍历数据库中数据并存在m_list列表中 if (pWorkspace != null) { IEnumDataset enumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass) as IEnumDataset; IDataset dataset = enumDataset.Next(); //遍历mdb的每一个独立要素类 while (dataset != null) { IFeatureClass pFeatureClass = dataset as IFeatureClass; m_list.Add(pFeatureClass.AliasName); dataset = enumDataset.Next(); } } else { vProgress.Close(); MessageBox.Show("数据源空间不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Activate(); return; } //从m_list中读取数据并分析 string[] array = new string[6]; bool boolarea = false; for (int i = 0; i < m_list.Count; i++) { flat = false; if (m_list[i].Contains(".")) { m_list[i] = m_list[i].Substring(m_list[i].LastIndexOf(".") + 1); } strExp = "select 字段名称 from 图层命名规则表"; string strname = dbfun.GetInfoFromMdbByExp(m_con, strExp); string[] arrName = strname.Split('+');//分离字段名称 for (int ii = 0; ii < arrName.Length; ii++) { switch (arrName[ii]) { case "业务大类代码": array[0] = m_list[i].Substring(0, 2); //业务大类代码 m_list[i] = m_list[i].Remove(0, 2); break; case "年度": array[1] = m_list[i].Substring(0, 4); //年度 m_list[i] = m_list[i].Remove(0, 4); break; case "业务小类代码": array[2] = m_list[i].Substring(0, 2); //业务小类代码 m_list[i] = m_list[i].Remove(0, 2); break; case "行政代码": array[3] = m_list[i].Substring(0, 6); //行政代码 m_list[i] = m_list[i].Remove(0, 6); break; case "比例尺": array[4] = m_list[i].Substring(0, 1); //比例尺 m_list[i] = m_list[i].Remove(0, 1); break; } } array[5] = m_list[i]; //图层组成 for (int j = 0; j < strAreaChild.Count; j++) //判断是否包含该行政区的辖区 { if (strAreaChild[j] == array[3]) { boolarea = true; break; } } //判断情况条件是否符合 #region switch (index) { case 0: flat = true; break; case 1: if (array[1] == comboBoxYear.Text && array[4] == strScale2 && boolarea) { flat = true; } break; case 2: if (boolarea && array[1] == comboBoxYear.Text) { flat = true; } break; case 3: if (boolarea && array[4] == strScale2) { flat = true; } break; case 4: if (array[1] == comboBoxYear.Text && array[4] == strScale2) { flat = true; } break; case 5: if (boolarea) { flat = true; } break; case 6: if (array[1] == comboBoxYear.Text) { flat = true; } break; case 7: if (array[4] == strScale2) { flat = true; } break; } #endregion string sourecename = comboBoxSource.Text.Trim(); if (flat) { ifinish++; strExp = string.Format("insert into 数据编码表(业务大类代码,年度,业务小类代码,行政代码,比例尺,图层代码,数据源名称) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", array[0], array[1], array[2], array[3], array[4], array[5], sourecename); string strdata = GetLayerName(array[0], array[1], array[2], array[3], array[4]) + array[5];//组织数据 string logpath = Application.StartupPath + "\\..\\Log\\DataManagerLog.txt"; LogFile log = new LogFile(null, logpath); string strLog = "开始分析数据源" + sourecename + "中" + strdata + "数据"; if (log != null) { log.Writelog(strLog); } vProgress.SetProgress(strLog); dbfun.ExcuteSqlFromMdb(m_con, strExp); //更新数据编码表 dbfun.UpdateMdbInfoTable(array[0], array[1], array[2], array[3], array[4]); //更新地图入库信息表 } } ifinish = list.Count >= ifinish ? list.Count : ifinish; vProgress.Close(); this.Activate(); if (ifinish == 0) { MessageBox.Show("没有符合条件的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("分析完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } this.Close(); } //重新编号 //strExp = "alter table 数据编码表 alter column ID counter(1,1)"; // dbfun.ExcuteSqlFromMdb(m_con,strExp); catch (System.Exception ex) { vProgress.Close(); MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }