好久沒寫文了, 距離上一篇文章是3個月前的事了,雖然工作很忙,主要還是缺少寫作的内容和激情,是以沒怎麼動手。
之前有一個來月不斷面試不同層次來應聘的人員,很有想寫文的沖動,後來還是忍住了。
估計寫了也是那種說人壞話、恨鐵不成鋼的情緒文,沒啥營養,是以情緒過了就沒想寫了。
在公司除了管理上的事情之外,另外也研發了一套适用資訊系統的快速開發架構,這個有機會再寫寫文和大夥分享了。
下面言歸正文了。
關于這個DBImport工具,釋出的版本不多,僅有:V1.0、V2.0、V3.0、V3.2和今天釋出的V3.3。
由于自己平時用到這個工具(導資料、導資料腳本、生成資料庫文檔)的頻率并不頻繁,
加上上一個版本已經很穩定,基本滿足個人需求,是以更新的頻率不高,從V3.0開始,一年多才釋出一個版本。
此次版本更新的動力主要來自(付費或非付費)使用者的需求和CYQ.Data底層架構的驅動。
下面看看曆史正文:
PS:導資料的時候,把說明也帶過去,如果你想複制公司的一個資料庫,又沒有導入導出備份等權限時,用這工具導就O了。
PS:有了1,2也順理出來了。
PS:之前的版本在小數位上,如果需要精準導過去,需要手工處理下生成的表結構,改好小數再導,這次直接做足這方面的事了。
PS:有了3,4也順理出來了。
PS:這個說的比較泛,是因為把MSSQL的所有類型都給處理了,底層代碼也改了不少,是以東西太多就用更泛的詞來解釋了。
PS:由于底層CYQ.Data架構去掉Oracle的分頁存儲過程,對于MSSQL的分布存儲過程也增加了配置項可不啟用,是以軟體上也多了這麼個配置項。
A:批量插入【包含主鍵】
B:批量插入【忽略主鍵】
C:批量更新【根據主鍵自動識别】
D:插入或更新【根據主鍵自動識别】
PS:這個功能很強大,通過D選項,幾乎可以實作兩個資料庫間的資料同步,而且重複導N次也不怕不怕了。
新版上圖:

A:timestamp 類型,存儲的是二進制資料,其它資料庫類型是日期,需要特殊處理。
B:識别各資料庫版本号,可以通過Connection對象的ServerVersion屬性擷取,以前竟然沒在意這個字段。
C:使用SqlBulkCopy批量插入,要注意資料長度問題,如果長度被截斷,會引發MSSQL服務直接挂掉,很變态的結果。
D:numeric 類型木有對應的SqlDbType。
E:當where in id(1,2,3,4,...) 表達式直接上1萬時,MSSQL2000直接就逾時挂了,其它版本資料庫正常。
F:MSSQL2000 木有Xml字段,同樣也木有max相關的東西,都需要轉換其它類型處理。
G:向MSSQL資料庫裡插二進制資料,可以這麼整:
UPDATE AllType SET
b5=newid(),
-- b7='<aa>dddd</aa>'
a1=(SELECT * FROM OPENROWSET(BULK N'C:\Users\cyq\Pictures\ico\taobao.ico', SINGLE_BLOB) AS aa)
WHERE id=1
A:如果字段為自增,那麼這個字段必須為主鍵,而且隻能存在這一個主鍵。
B:如果為自增加,資料庫腳本關鍵字字義必須提前,不能後面定義,如:
正解的:
"ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
錯誤的:
"ID" INTEGER AUTOINCREMENT NOT NULL,
PRIMARY KEY ("ID")
C:對于GUID類型的字段,由于存儲結構為16進制,是以查詢比較麻煩,需要進行以下的轉換後,才能進行比較查詢:
string gv=BitConverter.ToString(new Guid(&#8220;509e4e37-43ed-4e3d-b3bc-1c0929f0d151&#8221;).ToByteArray()).Replace("-", "");
最後的 條件就變成where id=x'gv這串東西'
A:對于GUID,正常是where id='509e4e37-43ed-4e3d-b3bc-1c0929f0d151',但是這種條件隻有在查詢和***時是正常的,更新的時候,還得這麼寫:
where id='{509e4e37-43ed-4e3d-b3bc-1c0929f0d151}' 是以有事沒事都自己補加個括号吧。
A:對于Text或Blob字段,不能設定為主鍵。
B:對于TinyInt字段,想用0-255,應該定義成:TinyInt(3) UNSIGNED
C:隻能存在一個自增列,若存在,必須定義為主鍵。
D:(中文内容或注釋)亂碼問題還是去配置MySql安裝目錄下my.ini的編碼。
A:對于設定為Not Null 屬性的字段,不允許插入空值,解決的方法是插入一個空的字元串。
B:ORA-08002: 序列 SEQ1.CURRVAL 尚未在此會話中定義,這個問題需要先調用SEQ1.nextval。
C:對于where id in(1,2,3,4,5...) 最大表達式為1000,超過這個數,需要分拆成where id in(1,2,..1000) or id in(1001,1002...2000)...
D:批量執行多條語句時,一般可以用:
begin
語句1;
語句2;
語句3;
end;
但是也有用不了的時候,比如語句是comment on column 表.字段 is 說明。解決的方法是分折成一條一條執行了。
時間也不早了,明天還得上班,得下了,對于仗義留言給32個贊支援的哥妹姐弟:
這兩天隻要将軟體上的聯系作者(Tab)下的本地資訊發往聯系資訊下的郵箱位址,将有機率獲得随機送出的軟體注冊碼。
Thanks~~~
本文轉自cyq1162 51CTO部落格,原文連結:http://blog.51cto.com/cyq1162/1421297,如需轉載請自行聯系原作者