<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      基于ArcGIS10.0和Oracle10g的空間數(shù)據(jù)管理平臺十一(C#開發(fā))-空間數(shù)據(jù)字段檢查

      我的獨立博客網(wǎng)址是:http://wuyouqiang.sinaapp.com/

      我的新浪微博:http://weibo.com/freshairbrucewoo

      歡迎大家相互交流,共同提高技術。

          最近在北京出差一直沒有時間繼續(xù)寫博客,主要是晚上上網(wǎng)的條件不好,而且和幾個同事住在一起也不太方便寫博客,因為隨時我們都可能聊天交流!今晚還是決定繼續(xù)寫一遍比較簡單的博客,就是繼續(xù)寫ArcGIS的項目,今天主要介紹的內(nèi)容就是關于空間數(shù)據(jù)完整性、格式等地檢查!

      1.首先定義一個用于操作的SDE空間數(shù)據(jù)庫的工作空間。

       

      1 public IFeatureWorkspace pWorkspaceSDE;//SDE數(shù)據(jù)庫的工作空間

       

      2.加載需要檢查的MDB數(shù)據(jù)庫文件。

       

      1             //設置默認DBM文件為第一個,并加載它的表到DataGridView
      2 filenameComboBox.SelectedIndex = 0;
      3 AddDataToDataGridView(filenameComboBox.SelectedItem.ToString());

       

          第一次加載時默認解析第一個MDB文件里面的數(shù)據(jù)表,并且把這些表的信息加載到控件中顯示。加載對應MDB文件的數(shù)據(jù)表信息的函數(shù)如下所示:

       

       1         /// <summary>
      2 /// 將DBM文件中的表加載到DataGridView中
      3 /// </summary>
      4 /// <param name="filename"></param>
      5 private void AddDataToDataGridView(string filename)
      6 {
      7 dataGridViewX1.Rows.Clear();
      8 //打開mdb文件所在的工作空間
      9 IWorkspaceFactory wf = new AccessWorkspaceFactory();
      10 IFeatureWorkspace pFeatureWorkspaceMDB = wf.OpenFromFile(filename, 0) as IFeatureWorkspace;
      11 IWorkspace pWorkspaceMDB = pFeatureWorkspaceMDB as IWorkspace;
      12
      13 //1.遍歷mdb的每一個要素集
      14 IEnumDataset enumDataset = pWorkspaceMDB.get_Datasets(esriDatasetType.esriDTFeatureDataset);
      15 IFeatureDataset featureDs = enumDataset.Next() as IFeatureDataset;
      16 object[] obj = new object[2];
      17 while (featureDs != null)
      18 {
      19 IFeatureClass pFeatureClass;
      20 IFeatureClassContainer fcContainer = featureDs as IFeatureClassContainer;
      21 for (int i = 0; i < fcContainer.ClassCount; i++)
      22 {
      23 pFeatureClass = fcContainer.get_Class(i);
      24 obj[0] = CheckFields(pFeatureClass.Fields, pFeatureClass.AliasName);
      25 obj[1] = pFeatureClass.AliasName;
      26
      27 dataGridViewX1.Rows.Add(obj);
      28 }
      29
      30 featureDs = enumDataset.Next() as IFeatureDataset;
      31 }
      32
      33 //2.遍歷mdb的每一個獨立要素類
      34 enumDataset = pWorkspaceMDB.get_Datasets(esriDatasetType.esriDTFeatureClass);
      35 IDataset dataset = enumDataset.Next();
      36
      37 while (dataset != null)
      38 {
      39 IFeatureClass pFeatureClass = dataset as IFeatureClass;
      40
      41 obj[0] = CheckFields(pFeatureClass.Fields, pFeatureClass.AliasName);
      42 obj[1] = pFeatureClass.AliasName;
      43
      44 dataGridViewX1.Rows.Add(obj);
      45 dataset = enumDataset.Next();
      46 }
      47
      48 //3.遍歷mdb的每一個屬性表
      49 enumDataset = pWorkspaceMDB.get_Datasets(esriDatasetType.esriDTTable);
      50 dataset = enumDataset.Next();
      51
      52 while (dataset != null)
      53 {
      54 ITable pT = dataset as ITable;
      55
      56 obj[0] = CheckFields(pT.Fields, dataset.Name);
      57 obj[1] = dataset.Name;
      58
      59 dataGridViewX1.Rows.Add(obj);
      60 dataset = enumDataset.Next();
      61 }
      62 }

       

      3.動態(tài)增加MDB文件到ComboBox,在打開檢查字段的界面以前可以先添加需要檢查的文件。

       

      1         /// <summary>
      2 /// 增加文件名到ComboBox中
      3 /// </summary>
      4 /// <param name="filename">文件名</param>
      5 public void AddDataToComboBox(string filename)
      6 {
      7 filenameComboBox.Items.Add(filename);
      8 }

       

      4.查字段是否符合數(shù)據(jù)標準定義,所有數(shù)據(jù)結構都是預先定義好了的并且存在數(shù)據(jù)庫中作為數(shù)據(jù)字典管理。

       

       1         /// <summary>
      2 /// 檢查字段是否符合數(shù)據(jù)標準定義
      3 /// </summary>
      4 /// <param name="pSourceFileds">字段集</param>
      5 /// <param name="strTableName">對應的標準名</param>
      6 /// <returns>true:成功;false:失敗</returns>
      7 private bool CheckFields(IFields pSourceFileds, string strTableName)
      8 {
      9 SqlHelper sh = new SqlHelper();
      10 //從數(shù)據(jù)庫定義標準表中查找出字段的定義
      11 string sql = "select * from jcsjk_fielddefine where table_name ='"
      12 + strTableName.ToUpper() + "' or table_name='" + strTableName.ToLower() + "'";
      13 //如果字段數(shù)目不同肯定就不能通過檢查了
      14 if (pSourceFileds.FieldCount != sh.GetRecordCount(sql))
      15 {
      16 return false;
      17 }
      18 bool result = true;
      19
      20 OracleDataReader odr = sh.ReturnDataReader(sql);
      21 object[] obj1 = new object[4];
      22 object[] obj2 = new object[4];
      23 //分別檢查字段名稱,字段類型,字段長度和字段是否可以為空
      24 for (int i = 0; i < pSourceFileds.FieldCount; i++)
      25 {
      26 odr.Read();
      27 //根據(jù)標準中定義的名稱查找檢查的字段名稱
      28 if (pSourceFileds.FindField(odr["NAME"].ToString()) >= 0)
      29 {
      30 IField pSourceField = pSourceFileds.get_Field(pSourceFileds.FindField(odr["NAME"].ToString()));
      31
      32 obj1[0] = pSourceField.Name;
      33 obj1[1] = pSourceField.Type;
      34 obj1[2] = pSourceField.Length;
      35 obj1[3] = pSourceField.IsNullable;
      36
      37 obj2[0] = odr["NAME"].ToString();
      38 if (odr["TYPE"].ToString() == "RowID")
      39 {
      40 obj2[1] = esriFieldType.esriFieldTypeOID;
      41 }
      42 else if (odr["type"].ToString() == "整數(shù)型")
      43 {
      44 obj2[1] = esriFieldType.esriFieldTypeInteger;
      45 }
      46 else if (odr["type"].ToString() == "浮點型")
      47 {
      48 obj2[1] = esriFieldType.esriFieldTypeDouble;
      49 }
      50 else if (odr["type"].ToString() == "字符型")
      51 {
      52 obj2[1] = esriFieldType.esriFieldTypeString;
      53 }
      54 else if (odr["type"].ToString() == "圖元")
      55 {
      56 obj2[1] = esriFieldType.esriFieldTypeGeometry;
      57 }
      58 obj2[2] = odr["LENGTH"].ToString();
      59 if (odr["ISNULL"].ToString() == "")
      60 {
      61 obj2[3] = true;
      62 }
      63 else
      64 {
      65 obj2[3] = false;
      66 }
      67
      68 if (obj1[1].ToString() != obj2[1].ToString()
      69 || obj1[2].ToString() != obj2[2].ToString()
      70 || obj1[3].ToString() != obj2[3].ToString())
      71 {
      72 result = false;
      73 break;
      74 }
      75 }
      76 else
      77 {
      78 result = false;
      79 break;
      80 }
      81 }
      82 return result;
      83 }

       

      5.點擊一個具體的表名之后在另一個控件中顯示這個表的字段的檢查結果,主要顯示這個是否成功,如果錯誤提示哪些方面的錯誤,例如字段數(shù)量不對(少了還是多了)、字段類型不對、數(shù)據(jù)的長度不匹配等。

       

        1         /// <summary>
      2 /// 點擊一個具體的表名之后在另一個控件中顯示這個表的字段的檢查結果
      3 /// </summary>
      4 /// <param name="sender"></param>
      5 /// <param name="e"></param>
      6 private void dataGridViewX1_Click(object sender, EventArgs e)
      7 {
      8 if (dataGridViewX1.CurrentRow == null)
      9 {
      10 return;
      11 }
      12 string strTableName = dataGridViewX1.CurrentRow.Cells[1].Value.ToString();
      13
      14 IWorkspaceFactory wf = new AccessWorkspaceFactory();
      15 IFeatureWorkspace pFeatureWorkspaceMDB = wf.OpenFromFile(filenameComboBox.SelectedItem.ToString(), 0) as IFeatureWorkspace;
      16 IWorkspace pWorkspaceMDB = pFeatureWorkspaceMDB as IWorkspace;
      17 //1.遍歷mdb的每一個要素集
      18 IEnumDataset enumDataset = pWorkspaceMDB.get_Datasets(esriDatasetType.esriDTFeatureDataset);
      19 IFeatureDataset featureDs = enumDataset.Next() as IFeatureDataset;
      20 IFields pFs = null;
      21
      22 while (featureDs != null)
      23 {
      24 IFeatureClass pFC = null;
      25 IFeatureClassContainer fcContainer = featureDs as IFeatureClassContainer;
      26 for (int i = 0; i < fcContainer.ClassCount; i++)
      27 {
      28 if (fcContainer.get_Class(i).AliasName.ToLower() == strTableName.ToLower())
      29 {
      30 pFC = fcContainer.get_Class(i);
      31 pFs = pFC.Fields;
      32 break;
      33 }
      34 }
      35 featureDs = enumDataset.Next() as IFeatureDataset;
      36 }
      37 //2.遍歷mdb的每一個獨立要素類
      38 if (pFs == null)
      39 {
      40 IFeatureClass pFC = null;
      41 enumDataset = pWorkspaceMDB.get_Datasets(esriDatasetType.esriDTFeatureClass);
      42 IDataset dataset = enumDataset.Next();
      43 while (dataset != null)
      44 {
      45 pFC = dataset as IFeatureClass;
      46 if (pFC.AliasName.ToLower() == strTableName.ToLower())
      47 {
      48 pFs = pFC.Fields;
      49 break;
      50 }
      51 dataset = enumDataset.Next();
      52 }
      53 }
      54 //3.遍歷mdb的每一個屬性表
      55 if (pFs == null)
      56 {
      57 ITable tc = null;
      58 enumDataset = pWorkspaceMDB.get_Datasets(esriDatasetType.esriDTTable);
      59 IDataset dataset = enumDataset.Next();
      60 while (dataset != null)
      61 {
      62 tc = dataset as ITable;
      63 if (dataset.Name.ToLower() == strTableName.ToLower())
      64 {
      65 pFs = tc.Fields;
      66 break;
      67 }
      68 dataset = enumDataset.Next();
      69 }
      70 }
      71 SqlHelper sh = new SqlHelper();
      72 string sql = "select * from jcsjk_fielddefine where table_name ='"
      73 + strTableName.ToUpper() + "' or table_name='" + strTableName.ToLower() + "'";
      74
      75 if (sh.GetRecordCount(sql) <= 0)
      76 {
      77 errTxt.Text = "標準不存在,不能檢查!";
      78 return;
      79 }
      80 if (pFs.FieldCount != sh.GetRecordCount(sql))
      81 {
      82 errTxt.Text = "標準檢查未通過,字段數(shù)量不匹配!";
      83 return ;
      84 }
      85
      86 OracleDataReader odr = sh.ReturnDataReader(sql);
      87 int count = 0;
      88 object[] obj = new object[2];
      89 for (int i = 0; i < pFs.FieldCount; i++)
      90 {
      91 odr.Read();
      92 //字段是否存在
      93 if (pFs.FindField(odr["NAME"].ToString()) >= 0)
      94 {
      95 IField pSourceField = pFs.get_Field(pFs.FindField(odr["NAME"].ToString()));
      96
      97 //1.檢查字段類型
      98 if (odr["TYPE"].ToString() == "RowID")
      99 {
      100 if (pSourceField.Type != esriFieldType.esriFieldTypeOID)
      101 {
      102 count++;
      103 obj[0] = pSourceField.AliasName;
      104 obj[1] = "字段類型錯誤";
      105 dataGridViewX2.Rows.Add(obj);
      106 continue;
      107 }
      108 }
      109 else if (odr["type"].ToString() == "整數(shù)型")
      110 {
      111 if (pSourceField.Type != esriFieldType.esriFieldTypeInteger)
      112 {
      113 count++;
      114 obj[0] = pSourceField.AliasName;
      115 obj[1] = "字段類型錯誤";
      116 dataGridViewX2.Rows.Add(obj);
      117 continue;
      118 }
      119 }
      120 else if (odr["type"].ToString() == "浮點型")
      121 {
      122 if (pSourceField.Type != esriFieldType.esriFieldTypeDouble)
      123 {
      124 count++;
      125 obj[0] = pSourceField.AliasName;
      126 obj[1] = "字段類型錯誤";
      127 dataGridViewX2.Rows.Add(obj);
      128 continue;
      129 }
      130 }
      131 else if (odr["type"].ToString() == "字符型")
      132 {
      133 if (pSourceField.Type != esriFieldType.esriFieldTypeString)
      134 {
      135 count++;
      136 obj[0] = pSourceField.AliasName;
      137 obj[1] = "字段類型錯誤";
      138 dataGridViewX2.Rows.Add(obj);
      139 continue;
      140 }
      141 }
      142 else if (odr["type"].ToString() == "圖元")
      143 {
      144 if (pSourceField.Type != esriFieldType.esriFieldTypeGeometry)
      145 {
      146 count++;
      147 obj[0] = pSourceField.AliasName;
      148 obj[1] = "字段類型錯誤";
      149 dataGridViewX2.Rows.Add(obj);
      150 continue;
      151 }
      152 }
      153 //2.檢查字段長度
      154 if (pSourceField.Length != int.Parse(odr["LENGTH"].ToString()))
      155 {
      156 count++;
      157 obj[0] = pSourceField.AliasName;
      158 obj[1] = "字段長度錯誤";
      159 dataGridViewX2.Rows.Add(obj);
      160 continue;
      161 }
      162 //3.檢查字段是否為空
      163 if (odr["ISNULL"].ToString() == "")
      164 {
      165 if (pSourceField.IsNullable != true)
      166 {
      167 count++;
      168 obj[0] = pSourceField.AliasName;
      169 obj[1] = "字段為空錯誤";
      170 dataGridViewX2.Rows.Add(obj);
      171 }
      172 }
      173 else
      174 {
      175 if (pSourceField.IsNullable != false)
      176 {
      177 count++;
      178 obj[0] = pSourceField.AliasName;
      179 obj[1] = "字段為空錯誤";
      180 dataGridViewX2.Rows.Add(obj);
      181 }
      182 }
      183 }
      184 else
      185 {
      186 errTxt.Text = "標準檢查未通過,沒有找到標準里面的" + odr["NAME"].ToString() + "字段!";
      187 return;
      188 }
      189 }
      190 if (count > 0)
      191 {
      192 errTxt.Text = "標準檢查未通過,失敗字段數(shù):" + count.ToString();
      193 }
      194 else
      195 {
      196 errTxt.Text = "標準檢查通過!";
      197 }
      198 }

       

      6.總結:本篇只介紹了一個功能就是檢查對應的空間數(shù)據(jù)結構是否匹配,這是導入數(shù)據(jù)到數(shù)據(jù)庫中的必備步驟,不然可能造成數(shù)據(jù)庫的損壞,也浪費了一些不必要的操作。本篇的代碼中還有datagridView和combobox等控件的使用,例如怎樣在datagridview控件的固定單元增加值等。

      posted @ 2011-12-07 22:08  薔薇理想人生  閱讀(1734)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 尤物国产精品福利在线网| 在线精品国精品国产不卡| 国产老女人精品免费视频| 人人人澡人人肉久久精品| 国产小嫩模无套中出视频 | 国产AV影片麻豆精品传媒| 国产福利片无码区在线观看| 日韩全网av在线| 国产亚洲精品在av| 丰满岳妇乱一区二区三区| 亚洲日韩亚洲另类激情文学 | 九九在线精品国产| 欧美级特黄aaaaaa片| 亚洲中文精品一区二区| 亚洲av一本二本三本| 久热天堂在线视频精品伊人| 熟妇女人妻丰满少妇中文字幕| 亚洲精品国产第一区二区| 久爱无码精品免费视频在线观看| 亚洲欧美日韩人成在线播放| 日韩在线观看精品亚洲| 天天综合色一区二区三区| 国产国语一级毛片| 四虎精品寂寞少妇在线观看| 嫩草成人AV影院在线观看| 国产精品美女一区二三区| 国内精品无码一区二区三区| 天堂av在线一区二区| 国产精品一区二区在线欢| 成人麻豆日韩在无码视频| 日韩人妻久久精品一区二区| 欧美中文字幕无线码视频| 国产偷窥熟女高潮精品视频| 欧美激情一区二区| 中文字幕av一区二区三区| 东京热人妻丝袜无码AV一二三区观| 国产伦精区二区三区视频| 免费A级毛片无码A∨蜜芽试看| 国产亚洲欧洲av综合一区二区三区| 久久久久久综合网天天| 沁阳市|