青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 64, 文章 - 11, 評論 - 12, 引用 - 0
數據加載中……

把Execl轉成SQL <1>

      前段時間,受命寫出一個把客戶提交的的電子數據資料(大部份是excel,也可以是word,access等)轉成標準的SQL語句。以初始化數據庫,保護客戶現有的資料,減輕客戶的負擔。原來也有過這樣的轉化工作,本想拿來就用,具體看了之后才發現不可能,無奈之際只有自己實現一個這樣的導入設計,目標是減輕以后的導入工作。
      針對客戶提交資料的不規范性(這里我指的規范是從程序員的角度來看),那么我們要做的一個工作就是在原來資料的基礎上增加開發的一些規范。比如說客戶提交了一張個人的信息表(如下:第二行是我后來加上去),如果單看用戶提交的表那么要轉成SQL語句,就會出現字段對應的依懶,還有引用的依懶。而一旦出現了這樣的依懶就沒有通用性可言(這句話有點過了,但至少是通用性明顯減弱),為此我們可以對這張表進行預處理加上一行指示與SQL中字段的對應,這樣我們就擺脫了case "性別": return "Gender";break;這樣的依懶了。或許有人會對此持以不同的態度,說我將程序中的這些CASE移至外層來處理,這個我接受,這一步是必不可少的,就看放在那里為優了。設計就是充滿權衡的,如果沒有權衡那么這個設計肯定忽略了一個弱點。這樣放到外層,可以減少程序編譯,降低程序復雜性等。解決了字段的對應關系,還有值的寫法關系也要解決的,如字符串的和整型的值的insert語句時就不同,為些我加上了{int}來表示整型。default就是string了,當然還可以有別的類型。第三個要解決的問題是引用,在我的數據庫設計中是基礎資料項及類共用的是三張表,所以這里就會出現Party:EntryItem(Party){int},表時在這個Entryitem表中的項必須是party這種類別。一般的不放在一張表的就寫成如下的形式Congress:Congress{int}就好了,這樣就完成在外圍解決引用這個問題。在上面我完成外部數據的無二義表示,對其它格式的文件都可以采用上似類似做法來完成數據適應過程。
姓名 性別 出生日期 民族 藉貫 黨派 學歷 邊界 是否歸僑 選區 工作單位及職務 職位 工作地址 電話 工作地址郵編 家庭地址 家庭電話 家庭郵編 聯系方式 可否交換 手機 可否公布手機   秘書姓名 秘書電話 專業小組 是否選擇 代表屆期 是否常委 代表證號 證號簡碼 技能特長 任職類別 描述 相片
Name Gender:EntryItem(Gender){int} Birthday Nationality:EntryItem(Nationality){int} Nativeplace Party:EntryItem(Party){int} Education:EntryItem(Education){int} Boundary:EntryItem(Boundary){int} IsROC{int} ElectoralDistrict:EntryItem(ElectoralDistrict){int} Organization Position Address OfficeTelephone OfficePostCode HomeAddress HomeTelephone HomePostCode ContactType:EntryItem(ContactType){int} CanSwitch{int} Mobile CanPublicMobile{int} Email SecretaryName SecretaryTelephone SpecialGroup IsSelected{int} Congress:Congress{int} IsPermanent CertificateNo CertificateSimpleNo Technology ElectionType:EntryItem(ElectionType) Description Photo
AAA     共產黨 未知 未知 0 天沙 AAA公司 董事、總經理             0 0         0   0 1 現任

由于客戶提供的電子數據多樣性,我就決定先生成XML然后由XML去生成SQL,這樣就可以獨立出XML生成SQL這一塊。到時用XML生成別的什么形式都是可以的。代碼如下:這里讀取excel我用了Syncfusion。生成后的XML應是這樣的形式
<?xml version="1.0"?>
<table name="...">
   <record id="1">
      <property name="name" value="AAA"/>
      ......
  </record>
   .....
</table>
  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.Xml;
  5using System.IO;
  6using Syncfusion.XlsIO;
  7
  8namespace EntitiesTest.Xml
  9{
 10    static class XmlConstraint
 11    {
 12        public const string TABLE = "table";
 13        public const string RECORD = "record";
 14        public const string PROPERTY = "property";
 15        public const string NAME = "name";
 16        public const string REFRENCE = "Refrence";
 17        public const string RESTRICT = "Restrict";
 18        public const string VALUE = "value";
 19        public const string ID = "Id";
 20        public const string TYPE = "Type";
 21
 22        //類型
 23        public const string INT = "int";
 24        public const string STRING = "string";
 25    }

 26    
 27    class HeaderInformation
 28    {
 29        private string _HeaderName;
 30        public string HeaderName
 31        {
 32            get return _HeaderName; }
 33        }

 34
 35        private string _ColumnRefrence;
 36        public string ColumnRefrence
 37        {
 38            get return _ColumnRefrence; }
 39        }

 40
 41        private string _Restrict;
 42        public string Restrict
 43        {
 44            get return _Restrict; }
 45        }

 46
 47        private string _DataType;
 48        public string DataType
 49        {
 50            get return _DataType; }
 51        }

 52
 53        public HeaderInformation(string name)
 54            :this(name,string.Empty)
 55        {
 56        }

 57
 58        public HeaderInformation(string name, string refrence)
 59            : this(name,refrence,string.Empty)
 60        {
 61        }

 62
 63        public HeaderInformation(string name, string refrence, string restrict)
 64        {            
 65        }

 66        public HeaderInformation(string name, string refrence, string restrict,string strType)
 67        {
 68            _HeaderName = name;
 69            _ColumnRefrence = refrence;
 70            _Restrict = restrict;
 71            _DataType = strType;
 72        }

 73    }

 74
 75    struct ColumnInformation
 76    {
 77        private string _Value;
 78        private HeaderInformation _HeaderInformation;        
 79
 80        public ColumnInformation(HeaderInformation headerInformation, string strValue)
 81        {
 82            _HeaderInformation = headerInformation;
 83            _Value = strValue;
 84        }

 85
 86        public void Convert(XmlWriter writer)
 87        {
 88            writer.WriteStartElement(XmlConstraint.PROPERTY);
 89            writer.WriteAttributeString(XmlConstraint.NAME, _HeaderInformation.HeaderName);
 90            writer.WriteAttributeString(XmlConstraint.VALUE, _Value);
 91            writer.WriteAttributeString(XmlConstraint.TYPE, _HeaderInformation.DataType);
 92            if (!string.IsNullOrEmpty(_HeaderInformation.ColumnRefrence))
 93            {
 94                writer.WriteAttributeString(XmlConstraint.REFRENCE, _HeaderInformation.ColumnRefrence);
 95                if (!string.IsNullOrEmpty(_HeaderInformation.Restrict))
 96                {
 97                    writer.WriteAttributeString(XmlConstraint.RESTRICT, _HeaderInformation.Restrict);
 98                }

 99            }

100            writer.WriteEndElement();
101        }

102    }

103
104    class RowInformation
105    {
106        private int _Id;
107        private List<ColumnInformation> columnList = new List<ColumnInformation>();
108
109        public RowInformation(int Id)
110        {
111            _Id = Id;
112        }

113
114        public void AddColumn(ColumnInformation column)
115        {
116            columnList.Add(column);
117        }

118
119        public void Convert(XmlWriter writer)
120        {
121            writer.WriteStartElement(XmlConstraint.RECORD);
122            writer.WriteAttributeString(XmlConstraint.ID, _Id.ToString());
123            foreach (ColumnInformation column in columnList)
124            {
125                column.Convert(writer);
126            }

127            writer.WriteFullEndElement();
128        }

129    }

130
131    public class XlsTableXml
132    {
133        private IWorksheet _WorkSheet;
134        protected IWorksheet WorkSheet
135        {
136            get return _WorkSheet; }
137        }

138
139        private int _RowTitle = 0;
140        public int RowTitle
141        {
142            get return _RowTitle; }
143            set { _RowTitle = value; }
144        }

145
146        private int _Columns;
147        public int Columns
148        {
149            get return _Columns; }
150            set { _Columns = value; }
151        }

152
153        private string _FilePath;
154        public string FilePath
155        {
156            get return _FilePath; }
157            set { _FilePath = value; }
158        }

159
160        public XlsTableXml(IWorksheet sheet)
161        {
162            _WorkSheet = sheet;
163        }

164
165        private Dictionary<int, HeaderInformation> _HeaderDict = new Dictionary<int, HeaderInformation>();
166        public void ConvertToXml()
167        {
168            if (Columns == 0)
169            {
170                _Columns = 100;
171            }

172            if (string.IsNullOrEmpty(_FilePath))
173            {
174                throw new InvalidOperationException("沒有為路徑賦值");
175            }

176            string strFullPathName = _FilePath + "\\" + WorkSheet.Name + ".xml";
177            CreateXmlFile(strFullPathName);
178            //建立寫對象
179            XmlWriterSettings setting = new XmlWriterSettings();
180            setting.Indent = true;
181            setting.OmitXmlDeclaration = false;
182            setting.NewLineOnAttributes = false;
183            XmlWriter writer = XmlWriter.Create(strFullPathName,setting);
184            CollectHeaderInformation();
185            int iCurrent=_RowTitle+1;
186            //寫動作
187            writer.WriteStartElement(XmlConstraint.TABLE);
188            writer.WriteAttributeString(XmlConstraint.NAME, WorkSheet.Name);
189            for (int iRow = iCurrent; iRow < WorkSheet.Rows.Length; ++iRow)
190            {
191                IRange row = WorkSheet.Rows[iRow];
192                RowInformation rowInfo = new RowInformation(iRow);
193                for (int iColumn = 0; iColumn < _HeaderDict.Count; ++iColumn)
194                {
195                    string strValue = row.Cells[iColumn].Value.Trim();
196                    if (!string.IsNullOrEmpty(strValue))
197                    {
198                        ColumnInformation column = new ColumnInformation(_HeaderDict[iColumn], strValue);
199                        rowInfo.AddColumn(column);
200                    }

201                }

202                rowInfo.Convert(writer);
203            }
            
204            writer.WriteFullEndElement();
205            writer.Flush();
206        }

207
208        private void CollectHeaderInformation()
209        {
210            for (int iColumn = 1; iColumn < Columns; ++iColumn)
211            {
212                string strFullValue = WorkSheet.GetText(RowTitle+1, iColumn);
213                if (string.IsNullOrEmpty(strFullValue))
214                {
215                    return;
216                }

217                HeaderInformation headerInformation = null;
218                string strRefrence = string.Empty;
219                string strRestrict = string.Empty;
220                string strName = string.Empty;
221                string strType = Xml.XmlConstraint.STRING;
222                int iLeft = strFullValue.IndexOf('{');
223                int iRight = strFullValue.IndexOf('}');
224                if (iLeft > 0 && iLeft < iRight)
225                {
226                    string temp = strFullValue.Substring(iLeft + 1, iRight - iLeft - 1);
227                    if (temp == XmlConstraint.INT)
228                    {
229                        strType = XmlConstraint.INT;
230                    }

231                    strFullValue = strFullValue.Substring(0, iLeft);                    
232                }

233                int colon = strFullValue.IndexOf(':');
234                if (colon < 0)
235                {
236                    strName=strFullValue.Trim();
237                }

238                else
239                {
240                    strName = strFullValue.Substring(0, colon).Trim();
241                    int leftBracket = strFullValue.IndexOf('(');
242                    if (leftBracket < 0)
243                    {
244                        strRefrence = strFullValue.Substring(colon + 1);
245                    }

246                    else
247                    {
248                        int rightBracket = strFullValue.IndexOf(')');
249                        strRefrence = strFullValue.Substring(colon + 1, leftBracket - colon-1).Trim();
250                        strRestrict = strFullValue.Substring(leftBracket + 1, rightBracket - leftBracket-1).Trim();                        
251                    }

252                }

253                _HeaderDict.Add(iColumn-1,new HeaderInformation(strName,strRefrence,strRestrict,strType));
254            }

255        }

256
257        private void CreateXmlFile(string strFullPathName)
258        {
259            if (!File.Exists(strFullPathName))
260            {
261                using (File.Open(strFullPathName, FileMode.Create))
262                {
263                }

264            }

265            else
266            {
267                File.SetAttributes(strFullPathName, FileAttributes.Archive);
268            }

269        }

270    }

271}

272


 1using System.Xml;
 2using System.IO;
 3using Syncfusion.XlsIO;
 4
 5namespace EntitiesTest.Xml
 6{
 7    public class Launch
 8    {
 9        private IWorkbook _Workbook;
10        public IWorkbook Workbook
11        {
12            get return _Workbook; }
13        }

14
15        private List<string> _convertList = new List<string>();
16
17        public Launch(IWorkbook book)
18        {
19            _Workbook = book;
20        }

21
22        public void AddConvertName(string name)
23        {
24            if (!_convertList.Contains(name))
25            {
26                _convertList.Add(name);
27            }

28        }

29
30        public void Start(string strDictionary)
31        {         
32            foreach (string name in _convertList)
33            {
34                IWorksheet sheet = _Workbook.Worksheets[name];
35                if (sheet == null)
36                {
37                    throw new ArgumentOutOfRangeException(string.Format("{0}表沒有找到,出錯", name));
38                }

39                XlsTableXml xlsTable = new XlsTableXml(sheet);
40                xlsTable.RowTitle = 1;
41                xlsTable.FilePath = strDictionary;
42                xlsTable.ConvertToXml();
43            }

44        }

45    }

46}

47

posted on 2008-03-26 19:21 Robertxiao 閱讀(758) 評論(0)  編輯 收藏 引用 所屬分類: 天馬行空

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产日韩综合一区| 国产精品久久久久aaaa| 可以免费看不卡的av网站| 亚洲特级毛片| 中文日韩在线视频| 中文精品视频| 日韩午夜在线电影| 99ri日韩精品视频| 亚洲在线观看| 国产欧美日韩在线观看| 麻豆免费精品视频| 亚洲国产导航| 亚洲欧洲一区二区天堂久久| 日韩天堂在线视频| 亚洲一区二区三区在线看 | 亚洲欧美日韩国产一区二区三区| 亚洲香蕉网站| 久久精品视频在线看| 久久女同精品一区二区| 欧美刺激性大交免费视频| 免费成人激情视频| 欧美日韩亚洲另类| 国内激情久久| av成人免费在线观看| 午夜精品免费视频| 欧美国产精品va在线观看| 99热在这里有精品免费| 亚洲摸下面视频| 欧美激情第3页| 激情伊人五月天久久综合| 中文在线资源观看网站视频免费不卡| 久久久久久久久久久一区| 亚洲国产精品va在看黑人| 亚洲影音先锋| 欧美伦理视频网站| 激情成人中文字幕| 亚洲男人av电影| 亚洲电影免费| 欧美在线一二三四区| 欧美精品一区视频| 伊大人香蕉综合8在线视| 亚洲一区二区精品在线| 亚洲国产成人在线| 玖玖综合伊人| 国产主播一区二区| 亚洲欧美自拍偷拍| 日韩视频三区| 农夫在线精品视频免费观看| 国产视频精品免费播放| 亚洲免费视频在线观看| 亚洲精品欧美日韩专区| 欧美freesex8一10精品| 亚洲韩国精品一区| 免费观看成人www动漫视频| 欧美一区二区三区电影在线观看 | 黄色成人在线| 久久国产手机看片| 亚洲一区二区三区四区在线观看 | 亚洲最新在线| 久久亚洲欧洲| 亚洲成色精品| 久久亚洲国产成人| 狠狠久久亚洲欧美| 久久久av水蜜桃| 午夜精品一区二区三区在线播放| 欧美日韩国产色综合一二三四 | 欧美乱在线观看| 宅男噜噜噜66一区二区66| 亚洲高清自拍| 欧美风情在线观看| 日韩小视频在线观看专区| 欧美大色视频| 欧美人成在线| 亚洲免费视频一区二区| 午夜激情综合网| 国产在线成人| 亚洲国产精品传媒在线观看| 欧美日韩国产精品 | 影音先锋日韩资源| 欧美69视频| 欧美激情视频网站| 亚洲一区三区在线观看| 亚洲在线免费观看| 狠狠色狠狠色综合日日tαg| 欧美a级一区| 欧美精品一区二区久久婷婷| 亚洲一区二区三区四区五区午夜 | 久久国产成人| 久久综合给合| 亚洲小视频在线| 久久激情久久| 一区二区日韩精品| 欧美一区三区二区在线观看| 亚洲黄网站在线观看| 中国成人亚色综合网站| 精品99一区二区| 9色国产精品| 国内精品久久久| 日韩一区二区精品视频| 国产一区av在线| 亚洲国产精品一区二区尤物区 | 欧美激情一区二区三区在线视频观看| 欧美精品日本| 欧美在线高清| 欧美另类高清视频在线| 久久国产精品72免费观看| 欧美电影在线| 久久久久国产精品午夜一区| 欧美国产精品专区| 久久精品一区二区三区不卡| 欧美不卡视频一区| 久久一综合视频| 99伊人成综合| 欧美成人午夜视频| 国产精品美女xx| 亚洲欧洲另类国产综合| 国产亚洲成精品久久| 亚洲美女尤物影院| 亚洲韩国日本中文字幕| 欧美一区免费视频| 午夜亚洲福利| 国产精品va在线播放| 亚洲经典在线| 91久久精品一区| 久久青草久久| 欧美成人精品一区| 红桃视频国产精品| 久久精品国产久精国产一老狼| 午夜国产精品视频| 欧美性大战久久久久| 亚洲免费av片| 亚洲色图在线视频| 欧美日韩在线大尺度| 亚洲精品婷婷| 亚洲视频高清| 欧美视频四区| 亚洲一区二区三区欧美 | 国产一区二区观看| 亚洲欧美精品| 欧美在线91| 国产日韩欧美综合| 亚洲永久视频| 久久av一区二区三区漫画| 国产精品麻豆成人av电影艾秋| 日韩一二在线观看| 亚洲一区视频在线观看视频| 国产精品99免费看| 亚洲一区二区免费看| 欧美一区网站| 国产亚洲美州欧州综合国| 久久国产精品电影| 久久这里有精品15一区二区三区| 国产在线精品自拍| 久久精品在线播放| 亚洲丁香婷深爱综合| 亚洲美女少妇无套啪啪呻吟| 欧美区在线播放| 一区二区三区日韩欧美精品| 亚洲欧美国产日韩天堂区| 国产日韩高清一区二区三区在线| 欧美在线黄色| 欧美激情区在线播放| 一区二区三区|亚洲午夜| 国产精品色午夜在线观看| 欧美一区二区成人| 亚洲电影下载| 欧美一区二区在线观看| 精品福利电影| 欧美日韩在线播放| 久久国产欧美精品| 亚洲精品美女在线| 久久精品91久久香蕉加勒比| 最新日韩在线| 国产伦精品一区二区| 免费黄网站欧美| 亚洲在线免费| 亚洲日本成人网| 久久亚洲精品中文字幕冲田杏梨| 亚洲另类视频| 国产日韩欧美在线视频观看| 欧美激情一区二区三区| 国产区在线观看成人精品| 一区二区三区欧美在线观看| 欧美亚洲一区二区三区| 日韩一级免费| 另类激情亚洲| 久久精品99无色码中文字幕 | 久久久久久91香蕉国产| 欧美国产日韩一区二区在线观看 | 久久精品免费电影| 国产精品国产三级国产专播精品人| 久久视频在线看| 国产乱肥老妇国产一区二 | 欧美大片91| 国产综合欧美| 新片速递亚洲合集欧美合集| 亚洲一区在线播放| 欧美成人按摩| 亚洲国产精品一区二区久| 亚洲激情不卡|