2010年12月13日 星期一

String or Binary data would be truncated

今天匯入EXCEL檔資料時,出現這個錯誤

String or Binary data would be truncated 

字串或二進位資料會被截斷

看來是某個欄位太長轉入TABLE時被截掉了,

但到底是哪個欄位?

只好採用刪去法來測試,

原來有個欄位table開varchar(20), 但EXCEL中却超出了長度.

記得以前也曾遇到這個問題,但每次都忘了是到底怎麼回事.

下次應該要先檢查EXCEL中的資料

記錄一下免得又忘了.

2010年12月9日 星期四

BugNet使用二個月的心得

自從10月初開始使用BugNet以來, 我和同事也用這套opensource的工具快2個月了.
大家可以說是愈用愈上癮,因為用這套來做為系統維護的Q&A時,大家將維護過程中遇到的問題及解決過程及個人心得感想全部都一股腦的輸入上去. 害我只得時時提醒大家不要寫一些個人情感抒發文在Comments或Time Tracking上.
同時大家也希望以後公司自己改寫的QA系統可以加上一個個人情感抒發的欄位,讓大家吐一下口水.

用到目前為止,我覺得最好的功能是custom fileds的設定,讓專案維護很有彈性.
再來就是RoadMap的呈現, 哪些還在進行中的問題或已經結案的問題都可以很一目了然

當然,也有一些很煩的地方, 例如有些ISSUS欄位真想要有預設值, 同事抱怨要"打很多字咧"...
還有可以一登入就看到屬於自已的而且跨所有PROJECTS的OPEN ISSUE有哪些嗎? 這也是不錯的建議...
結果今天上BugNet的官網上看, BugNet已有更新版2010/12/05 version 0.8.270.0,而且把這個功能加上去了. 可以參考完整的功能說明


最後,DB的設計我也覺得很清楚,可以很方便讓我寫自已要的報表查詢. 利用pivot 語法,將自訂欄位做一個整合呈現.

這二個月操作上使用很多,但source code就沒看那麼深入,因為偶覺得有點小複雜咧.

等空閒時間多了再來好好細細研究.

http 方式連結 analysis server SQL2008 R2

環境是SQL2008 R2 64 bits, 要建立OLAP HTTP連線
設定方式請參考阿兜仔所寫的文章

Configuring HTTP Access to SQL Server 2008 Analysis Services on Microsoft Windows Server 2008

設定後,在SSMS 2008R2 用http://myserver/olap64/msmdpump.dll 的方式連結到AS Server上.

結果出現這個錯誤訊息...

Cannot connect to http://myserver/olap64/msmdpump.dll.

The connection either timed out or was lost. (Microsoft.AnalysisServices.AdomdClient)

遠端伺服器傳回一個錯誤: (405) 不允許的方法。 (System)


再試著在Excel 2010, 以http連線到AS , 結果出現另一個訊息..

the http server returned the following error: method not allow


反覆檢視文章,檢查了半天, 看來設定沒問題....
(IIS 7的介面真的令人很不習慣,一個設定要找老半天,還要中翻英一下才...)


最後,忙了半天,在教學文章末的討論中找到答案,
由Andy T. 網友所回覆..在iis applicationpool (應用程式集區), 進階設定,將啟用32位元應用程式設成False就好了...

以下是這位Andy阿兜仔說的....

I wanted to add in a comment on 64-bit vs. 32-bit.  I am running Vista Business on a 64-bit machine.  I kept getting "405.0 - Method not allowed" errors when trying the http URL to the msmdpump.dll.  The error seemed as though it was not accepting the POST method, but in fact the issue was that my OLAP application pool should not be enabled for 32-bit applications.  If you go to the advanced settings on the OLAP application pool, the 2nd setting from the very top is, "Enable 32-Bit Applications" and it must be set to "False" since I am running on a 64-bit machine.
- Andy

開啟SSMS, 用http連線.....然後, 就成功了.....
Browse Cube ....冇問題啦
Process ............也冇問題啦

ps.同事說,他使用SQL 2008 64 bits + SP2, 在SSMS中以http方式連結AS SERVER,結果process時, 整個當掉. 目前無解...

2010年11月10日 星期三

Total Commender 找多個副檔名的檔案

Total Commander真不錯用.
很方便找尋某段時間內曾修改或新增的檔案

點選搜尋小圖示後,在尋找檔案的小視窗先切換到一般頁籤,選擇要搜尋的目錄


接著切到外掛頁籤新增規則, 可以依你想要的屬性及操作欄位設定查詢條件,
但當我想要找二個以上的副檔名時,真不知要怎麼下條件咧..

看了一下HELP, 要用正規式(expression)的方式設定,
像我要找2010/11/10 14:00:00後有異動過的.cs及.aspx檔,
就要下cs|aspx

最後,可以將這個查詢條件儲存起來,方便下次再用

2010年11月9日 星期二

JQuery 取得 asp cehckbox checked

想要針對某個<asp:checkbox>被點選時,要alert一些提示訊息

看了幾篇文章試都不成功
最後是用

if ($(".classChktest input[checked=true]").length > 0) {
   //do somethin
}

其中classChktest 是針對這個<asp:checkbox>設置的cssClass

2010年11月4日 星期四

SSMS2008 R2 Recent Servers List

因為有個連線帳號的密碼老是存不起來,每次開一個QUERY都要重打一次密碼,很煩啊..

要如何重設SSMS 2005/2008/2008R2中的連線資訊呢?

參考這篇文章...解決了一個非常煩人的小問題

Clearing the Recent Servers List in SQL Server Management Studio

刪除以下的目錄刪完後再重開SSMS就OK了
SQL Server 2008:
C:\Documents and Settings\<%username%>\Application Data\Microsoft\Microsoft SQL Server\100\Tools\Shell
SQL Server 2005:
C:\Documents and Settings\<%username%>\Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell

 在windows 7中,路徑已改成(以SQL Server 2008R2為例)

 C:\Users\<%username%>\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell

2010年11月1日 星期一

VS2010 LINQ Stored Procedure

更新某支Stored Procedure, 開啟dbml檔刪除SP,, Server Explore連上DB後,直接拖拉新的SP,
出現這個訊息
The return types for the following stored procedures could not be detected. Set the return type for each stored procedure in the Properties window.

參考這篇...

Error: Unknown Return Type, The return types for the following stored procedures could not be detected….(LINQ).


建議的二種方法都不喜歡.

最後只好手動修改dbml檔的 .designer.cs檔

原本wizard自已產出的code如下
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.zspTest")]
        public void zspTest([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="SmallInt")] System.Nullable<short> param1,
            [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="SmallInt")] System.Nullable<short> param2,
            [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] ref System.Nullable<int> rtn)
        {
            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), param1, param2, rtn);
            rtn = ((System.Nullable<int>)(result.GetParameterValue(2)));
        }

手動改成

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.zspTest")]
        public int zspTest([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="SmallInt")] System.Nullable<short> param1,
            [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="SmallInt")] System.Nullable<short> param2,
            [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] ref System.Nullable<int> rtn)
        {
            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), param1, param2, rtn);
            rtn = ((System.Nullable<int>)(result.GetParameterValue(2)));
            return ((int)(result.ReturnValue));
        }

2010年10月30日 星期六

Pencil Project

無意中看到這個open source的工具, Pencil Project

官方首頁這麼寫著

The Pencil Project's unique mission is to build a free and opensource tool for making diagrams and GUI prototyping that everyone can use.

當下覺得這free 又是 opensource, 又可畫GUIprototyping, 就覺得很有意思.
下載下來安裝, 目前是1.2 build 0

以往寫文件做UI展示說明時,不管是client/server 或website project, 通常都是看專案是用什麼工具開發,就用什麼工具去做UI的設計.
或者寫power point檔時,常需要用圖表來表示重點,通常也都是用visio,自已每次在用visio時,總是怨嘆自已缺乏藝術天份,覺得做出來的圖很二光.

有了這個工具,在做UI design時,就覺得很有FU了,而且元件拖拉及對齊也很方便.里頭的一些元素也是我喜歡的那種style

另外,也可以匯入別人做好的stencils (collection)export template

不管用何種export template, 其實最後其實都是將設計好的UI轉成圖檔再嵌入吧?

試過後,只有匯出圖檔和html格式是OK的.

來一張匯出的截圖..嗯....很像一回事..
至於匯出pdf,doc則有錯誤,參考這個issue的說明

就嚐鮮來說, 這真是個有趣的工具.

2010年10月29日 星期五

BugNet - OraAspNetConString?

今天測試時,突然跳了個runtime error

The connection name 'OraAspNetConString' was not found in the applications configuration or the connection string is empty. (C:\Windows\Microsoft.NET\Framework\v2.0.50727\Config\machine.config line 166)

WHY????

今天確實裝了oracle client 11g r2

也剛好google到討論,不然又是一陣莫名奇妙...


Widget Administration not found.

.NET 2.0 SiteMap使用的时候有一个错误

 註解掉 C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config 

     <siteMap>
      <providers>
        <add name="OracleSiteMapProvider" type="Oracle.Web.SiteMap.OracleSiteMapProvider, Oracle.Web, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName="" securityTrimmingEnabled="true" />
      </providers>
    </siteMap>

SSRS 2008 欄位動態隱藏

在SSRS 2008 report designer中,將欄位動態顯示,是直接設定textbox的Hidden屬性.
preview時,看來一切都很正常,整個欄位也會隨著條件做顯示

轉成rdlc後,在website檢視這張表,卻發現動態顯示欄位的功能失效了.

試了一下,在Column Groups中設定才能正常動態顯示欄位.


先將report designer的Column Groups切換到Adavanced Mode
點選要動態隱藏的欄位(例上圖第9個(Static)欄位)


在屬性Hidden設定隱藏的Expression

這樣就可以動態依條件顯示欄位了.














RDL和RDLC雖然都可藉由report viewer來呈現.但RDLC使用上仍有一些限制,可以參考MSDN上的比較說明

Visual Studio 2010 中的 Reporting Services 和 ReportViewer 控制項

2010年10月28日 星期四

sql2008r2 64bit 查詢sql2000 32bit linked db

在sql 2008 r2 64bit加入一台sql 2000 linked db.

新增時一切正常,也可瀏覽目錄.

但4 part name查詢時,出現以下錯誤

無法為連結伺服器 XXX 的 OLE DB 提供者 "SQLNCLI10" 取得結構描述資料列集 "DBSCHEMA_TABLES_INFO"。提供者支援介面,但在使用時傳回失敗碼。

建立linked db時Provider 確實是選擇用SQL Server Native Client 10.0的方式建立的

後來改用 ODBC選SQL Server的驅動來建立linked db,就沒有此查詢錯誤了.

也可參考這篇KB 的解決方法.在sql server 2000那台機器上執行下列dos 指令

osql -U sa -P yourPWD -S ss2000 -i "C:\Program Files\Microsoft SQL Server\MSSQL\Install\instcat.sql"

執行完成後, 4 part name 的查詢就正常了

2010年10月27日 星期三

T400 ATI Driver問題

這個問題遇到很多次了, 每次都是在開IE瀏覽器中出現問題
自從二週前將RAM升到8GB後,現在幾乎每天都會至少來個二次.
真不確定是RAM的問題還是IE的問題, 至少使用firefox時,還沒有這種狀況發生

問題出現時,MOUSE會先停住無法使用, 接著整個畫面HANG住沒反應, 然後2秒後整個螢幕一閃成黑色後再回迅速回復,接著就出現"顯示器驅動程式停止回應,並已恢復, 顯示器驅動程式AMD driver停止回應,並已順利恢復" 的訊息


將ATI Driver升級到官方最新版本還是一樣. BIOS中DISPALY改成只使用獨立顯卡也是一樣

2012/04/21
經過幾個月來的觀察, 到聯想維修中心去換了主機板後, 這個問題已經不再發生.
(維修之前也曾整個重灌過,麻是沒用.)

但仍有一個問題是, 以前t42直接蓋上後就進入待命狀況(月亮), 但t400蓋上後,再把電源拔掉時,無法待命, 如不注意,就放進背包外出,等到了目的地時,才發現NB根本沒在待命狀態中,而且一整個發燙.而且是極燙....
反覆測了幾次,終於找到方法, 就是要先拔掉電源,MOUSE後, 再蓋上,就真的進入待命 了.


心得是, 大和實驗室不再是金字招牌了.

IBM THINKPAD...... I MISS U.

2010年10月26日 星期二

Informix dbload大量資料

infmrox 更改欄位型態时, 因為有些table 太大,若在buffer log下使用alter 方式來修改,容易造成long transaction

有時即使切換成nolog模式, alter也不見會成功

所以應使用unload and dbload的方法來重轉資料

informix沒有GUI的管理介面, shell又不太熟, 就土法煉鋼一步一步做吧.

(心中不禁佩服那些在unix terminal mode下做事的偉人...,慶幸我活在SQL Server 的陰影下)

1.unload data (可以包成shell, 用nohup backgroud執行,若筆數過大,建議放成幾個.unl檔)
   set isolation to dirty read;
   unload to a.unl delimiter ';'
   select * from yourTable;

  事後要再切割.unl檔,可以使用 split -10000 a.unl
  表示將a.unl 每10000筆切割一個檔案, 會產生xaa,xab,xac......的檔案

2.create your temp table (要放unload的資料)
  
3.create a.com ( dbload要用到的command file, 其中160是欄位數)
   FILE a.unl DELIMITER ';' 160;
   INSERT INTO   table_tmp;

4.prepare dbload.sh (執行a.com,將資料轉入 table_tmp, 每1000筆commit一次, errorlog 寫到 a.err
  dbload -d yourdb -c a.com -l a.err -e 0 -n 1000

以上可都可寫成shell後,用nohup time sh xx.sh >> xx.out 2>&1 &的方式執行, 一來可background作業, 二來可以記錄每次作業的時間, 就不用一直守著陽光守著結果了.. ..

ps.為什麼不用SSIS呢? 因為用SSIS 轉informix資料真是一大折磨,問題多多, 原本SQL 2000 DTS連結informix超級完美, 但SSIS 2005後,問題一堆... 使用官方的driver測試後的效果實在差到不行, 光是一個簡單的單一table 做data flow task, 就嗝屁了. 是我程度太LOW嗎?

SQLServer 2008R2 修復失敗

因為vs2008無法debug的問題,昨天重裝window 7,
也因為手上幾個專案橫跨sql2000 - sql 2008, 除了sql 2000是放在VPC外, 我在這台windows 7分別案裝了SSMS2005和SSMS2008, 安裝時,忘了記取上回SSMS類別未登錄的教訓, 結果裝完sql 2008R2後,才發現, 順序又弄錯了, 造成開啟SSMS 2005的project時出現類別未登錄的錯.
我真是腦殘.....OS仍是.法克....

MS connect 上看到一篇相關的解法方法,依法處理.
Start /wait E:\Software\MicroSoft\SQL2005\StandardENG\DISC1\setup.exe /qb INSTANCENAME=yourserver REINSTALL=ALL REINSTALLMODE=omus SAPWD=yourpwd
 
結果SSMS 2005修好了, 但現在變成SSMS 2008 沒法開solution了. 我真是手賤....

也想如法泡製重新安裝SSMS 2008,結果這個安裝指令不適用在SQL 2008

那就repair一下SQL 2008 R2吧, 執行一半出現
Error 1316.A network error occurred while attempting to read from the file F:\1033_ENU_LP\x64\setup\SSCERuntime_x86-enu.msi

看了一下 安裝光碟根本沒有這個檔案..只有SSCERuntime.msi.

唉, again ........殘念.  ......Remove and Reinstall. 又是瞎忙的一天.   OS.....仍是法客

VS2008無法進入debug 模式

前幾天,想要debug一下某個vs2008的專案檔.
按F5進入debug後, 原本應該disable變成灰色的綠色執行鍵, 在一開啟ie後, 就變回綠色,完全無法進入debug模式.

試了二天, 網路上一堆相同問題,但各有不同解決的方法, 我都試過而且還將windows 7重裝,vs2008重裝.....實在很雖小,在那麼clean的環境下, 仍然無法debug, 強烈懷疑是某個windows 更新造成的?

幹....這一個月來我得了電腦災害, 一堆問題突然湧現, 我心中吶喊這個字不止上千遍了.

今天, 試最後一招, 用run as administrator開啟vs2008......

太神奇....我明明就是用adminstrators的帳號登入本機的啊... WHY, 開過一次後, 這個無法debug的問題就解決了..

一頭霧水................................................法客

2010年10月23日 星期六

BugNet Email寄送

啟用寄發Email通知的功能

1.在 /Administration/Host/Settings.aspx 下的 Mail / SMTP 設定mail server , host email

2.在web.config 將

    <system.net>

    <mailsettings>

    <smtp deliverymethod="SpecifiedPickupDirectory">

    <specifiedpickupdirectory pickupdirectorylocation="C:\Email">

    </specifiedpickupdirectory>

    </smtp>

    </mailsettings>

    </system.net>

    改成

    <system.net>

        <mailSettings>

          <smtp deliveryMethod="Network">

          </smtp>

        </mailSettings>

    </system.net>

3.新增issue時,assigned to 時, Notify 要checked (default is true)
4.自已assign給自已的issue異動,你不會收到mail通知的, 但若是別人異動這個issue則會收到.
  You won't receive email notifications for your own actions, but others will.

2010年10月18日 星期一

已經為連結伺服器 "test" 的提供者 "SQLNCLI" 指定無效的結構描述或目錄

更改了server test 中的某一個table schema

因為資料量很大,所以通常都是先create 新table後,再用匯入匯出精靈將資料轉到新table, 轉換完畢後再將舊的table drop , 然後rename 新table.

以前都直接在Enterprise Manager上做reanme的動作, 但這次改用sp_reanme來更名.

sp_rename 'new_table', 'old_table '

結果今天查詢linkd db時,  select  count(*)  from test.mydb.dbo.old_table

出現了以下的錯誤

已經為連結伺服器 "test" 的提供者 "SQLNCLI" 指定無效的結構描述或目錄。

參考 NSDN這篇文章,

How to set up and troubleshoot a linked server to an Oracle database in SQL Server

里頭提到, 要嗎沒有permission,要嗎就是table name 不存在......

利用 sp_tables_ex  @table_server=test, @table_name='old_table'  

來查看linkdb中的table是否存在, 結果竟然沒有半筆資料......可是table 明明都在啊

直接用select * from openquery (test, 'select count(*) from old_tab') 來查詢,卻又有筆數..
select  count(*)  from test.mydb.dbo.old_table  比較
以結果筆數來說,這二個語法不應該是相同的嗎? 真是沒道理啊....

再來,  select * from sysobjects where name like '%old_table%'

table也是存在的. select 其他table都OK, 唯獨這個table都查不到....WHY????

回頭檢查了一那天跑的sql syntax...

原來 sp_rename 'new_table', 'old_table '  , 'old_table ' 後面多了一個空白, 
這個空白,讓linkdb 不認得了....


sp_tables_ex 執行時, 如果出現

伺服器 'MOJSS' 並未設定給 DATA ACCESS

請執行  exec sp_serveroption 'your server name','data access',true



CInt vs Int

完成參考 Microsoft® Visual Basic® Scripting Edition

其中附註說明
附註 CInt 函數與 Fix 及 Int 函數不同,Fix 和 Int 函數會將小數部分去除,然後傳回整數值。當小數部分恰好為 0.5 時, CInt 函數會將它轉換成最接近的偶數值。例如,0.5 轉換成 0,而 1.5 轉換成 2。

2010年10月6日 星期三

SQL Server Job查看

--查看job 
SELECT job_id, [name] FROM msdb.dbo.sysjobs

--查看job step
SELECT job.job_id,notify_level_email ,name,
enabled,description ,step_name,command,SERVER,database_name
FROM msdb.dbo.sysjobs job JOIN msdb.dbo.sysjobsteps steps
ON job.job_id = steps.job_id

--查看job history 歷程1, 最多1000筆(可在agent設size)
SELECT j.job_id, j.name, h.run_duration,h.step_id    FROM sysjobs j
INNER JOIN sysjobhistory h ON h.job_id=j.job_id
INNER JOIN (
SELECT job_id, MAX(STR(run_date,8)+STR(run_time,8)) AS LastRunDate
FROM sysjobhistory GROUP BY job_id
) x ON j.job_id=x.job_id
WHERE h.step_id=0 
AND STR(h.run_date,8)+STR(h.run_time,8)=x.LastRunDate

--查看job history 歷程2
SELECT run_date, run_time FROM sysjobhistory a INNER JOIN sysjobs b
ON a.job_id = b.job_id
WHERE  name LIKE  'OLAP%'

--查看job sysjobschedules
SELECT b.name,active_start_date,active_start_time,active_end_date,active_end_time
 FROM sysjobschedules a INNER JOIN sysjobs b
ON a.job_id = b.job_id
WHERE b.name LIKE 'OLAP%'

2010年9月17日 星期五

BugNet Devepoler 角色查看Issue

同事使用BugNet的角色將之設定為Developer, 因為望文生義,所以只幫他勾選了這個角色

有天他登入後,查看Issue List, 點選了某一筆的IssueTitle, 接著畫面就呆住不動等啊等的,出現了了這個錯誤.

Object reference not set to an instance of an object.

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.]
   BugNET.Issues.IssueDetail.SetFieldSecurity() in C:\BugNet\WebSite\Issues\IssueDetail.aspx.cs:487
   BugNET.Issues.IssueDetail.Page_PreRender(Object sender, EventArgs e) in C:\NET\BugNet\WebSite\Issues\IssueDetail.aspx.cs:139
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24
   System.EventHandler.Invoke(Object sender, EventArgs e) +0
   System.Web.UI.Control.PreRenderRecursiveInternal() +112
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4184


debug後在 IssueDetail.aspx.cs SetFieldSecurity 方法, 倒數幾行
if (!ITUser.HasPermission(ProjectId, Globals.Permission.CLOSE_ISSUE.ToString()))
 {
     Status s = Status.GetStatusByProjectId(ProjectId).Find(delegate(Status status){return status.IsClosedState == true;});
       if (s !=null)
        {
            DropDownList stat = (DropDownList)DropStatus.FindControl("dropStatus");
            stat.Items.Remove(stat.Items.FindByValue(s.Id.ToString()));
        }
  }

加入紅字判斷物件是否存在即可.


另外原先下載的sourcre中,少了一個 /jHtmlArea/scripts/jHtmlArea-0.7.0.js目錄及檔案,導致查看issue detail時,會有javascript 找不到屬性或方法的錯.

可以到此網站下載, 在專案中將目錄及檔案加入即可,不然開啟查看明細的page時,要等很久.

2010年9月14日 星期二

BugNet 禁止匿名進入

BugNet預設是可以讓使用者一進入網站後就看到所有的public project的訊息,雖然是唯讀,但總覺得應該先登入後再依來查看project會比較好.

原本以為要改寫程式碼,但後來在資料表BugNet_HostSettings中看到,SettingName有一列名為 DisableAnonymousAccess,將其SettingValue設為True即可禁止匿名登入

2010/09/16....原來在 /Administration/Host/Settings.aspx 下,已經有這個選項的設定了...(汗...)

ps2.如果要依使用者權限來顯示project,則在Admin projects下,進入project administration,將其Security 的Access Type設為private,如此,當使用者登入時project就會依權限角色的設定來顯示了.
預設的Access Type是public ,代表只要登入後,所有人都可直接唯讀該project 內容.

另外,如要停用網站register功能,同樣的找到 DisableUserRegistration 將其SettingValue設為True即可

2010年8月31日 星期二

BugNet 新增選單

Source Code中有個Web.sitemap,看來是定義目錄選單
查看里有個Reports的定義,但實際執行時,選單卻看不到.
在web.config中,將sitemape的註解行拿掉,一debug run後,在Old_App_Code的UIL下的SmartSiteMapProvider.SmartSiteMapProvider_SiteMapResolve事件馬上變成是個無窮迴圈,有點搞不清這個東西,更懶得查找原因.

土方煉鋼一下,在UserControls目錄看到TabMenu.ascx.cs.Page_Load事件寫了許多和menu相關的程式碼,加上一段
if (Context.User.Identity.IsAuthenticated)
{
   if (ITUser.IsInRole("Reporter"))
  {

      Tabs.Add(new Tab(GetLocalResourceObject("Reports").ToString(), "~/Reports/SelectReport.aspx"));

  }
} 
 
我要的menu就出來了, 
然後就可以用RDLC自已去加一些分析的報表囉.
參考大師想的,看看要做哪些報表
BugNET 應用:從問題資料庫挖掘專案問題的線索
 
或是參考TFS Reporting Samples, 這就更專業了

2010/10/30,
網站已更新到0.8.25, 試著再把sitemap開啟,debug後,似乎進不了頁面?
SmartSiteMapProvider該如何使用呢?

所以,如想要新增tab menu, 也只好在 TabMenu.ascx.cs.Page_Load再加上一段

Tabs.Add(new Tab(GetLocalResourceObject("NewTab").ToString(), "~/NewTab/myPage.aspx"));


同時,也必需在BugNet_StringResources 加入一筆設定


insert into BugNet_StringResources
select 'UserControls/TabMenu.ascx','en','NewTab','NewTab'

HTML特殊字元參考

使用sandcastle製作文件時在<example>中撰寫範例時, 有些字元要做一下轉換.例如List的 大於小於符號,若未轉換,則產出的文件會有
 [missing <param name="type"/> documentation for......的錯誤

來源網站 Special Entities

CharacterEntityDecimalHexRendering in Your Browser
EntityDecimalHex
quotation mark = APL quote&quot;&#34;&#x22;"""
ampersand&amp;&#38;&#x26;&&&
less-than sign&lt;&#60;&#x3C;<<<
greater-than sign&gt;&#62;&#x3E;>>>
Latin capital ligature OE&OElig;&#338;&#x152;ŒŒŒ
Latin small ligature oe&oelig;&#339;&#x153;œœœ
Latin capital letter S with caron&Scaron;&#352;&#x160;ŠŠŠ
Latin small letter s with caron&scaron;&#353;&#x161;ššš
Latin capital letter Y with diaeresis&Yuml;&#376;&#x178;ŸŸŸ
modifier letter circumflex accent&circ;&#710;&#x2C6;ˆˆˆ
small tilde&tilde;&#732;&#x2DC;˜˜˜
en space&ensp;&#8194;&#x2002;
em space&emsp;&#8195;&#x2003;
thin space&thinsp;&#8201;&#x2009;
zero width non-joiner&zwnj;&#8204;&#x200C;
zero width joiner&zwj;&#8205;&#x200D;
left-to-right mark&lrm;&#8206;&#x200E;
right-to-left mark&rlm;&#8207;&#x200F;
en dash&ndash;&#8211;&#x2013;
em dash&mdash;&#8212;&#x2014;
left single quotation mark&lsquo;&#8216;&#x2018;
right single quotation mark&rsquo;&#8217;&#x2019;
single low-9 quotation mark&sbquo;&#8218;&#x201A;
left double quotation mark&ldquo;&#8220;&#x201C;
right double quotation mark&rdquo;&#8221;&#x201D;
double low-9 quotation mark&bdquo;&#8222;&#x201E;
dagger&dagger;&#8224;&#x2020;
double dagger&Dagger;&#8225;&#x2021;
per mille sign&permil;&#8240;&#x2030;
single left-pointing angle quotation mark&lsaquo;&#8249;&#x2039;
single right-pointing angle quotation mark&rsaquo;&#8250;&#x203A;
euro sign&euro;&#8364;&#x20AC;

2010年8月27日 星期五

手動安裝BugNet

前幾個月小玩了一下BugNet, 其實他有DotnetNuke的影子在.所以我使用起來覺得挺親切的

這是線上版,可以看看他的功能和操作介面

現在開始要記錄一個內部小專案的點滴, 所以打算用這套管理工具,同時打算升級到vs2010,方便做一些客製修改,以下是安裝過程

1.先到BugNet網站下載 source,目前版本為 0.8.193.0,  

已經有for vs2010的版本0.8.221.0, release date 2010/08/31,

修改source code  BugNET_WAP\BugNET_WAP.csproj,把UseIIS設成False, 所以步驟2-8都不用了

若要沿用原來0.8.1930的資料庫,不想執行install, 則將src\BugNET_WAP\Install\dbscripts\Latest.SqlDataProvider.sql直接執行
或者參考官網的升級步驟


若建立一個新的DB,則繼續 步驟9-13

2.解壓縮後,先將src\BugNET_WAP複製出來, 因為等等要升級到vs2010
3.點開src\BugNET.sln,用vs2008開啟,開啟時,系統會提示在IIS建立BugNet的虛擬目錄,開啟後,先rebuild solution,將會使用到的bin檔先準備好(因為直接用bin檔下的dll比較省事)
4.刪除IIS  BugNet的虛擬目錄
5.在vs2010開啟步驟2的目錄下的BugNET_WAP.csproj 專案檔 (來源是web application而不是web site project)
6.系統會再提示在IIS建立BugNet的虛擬目錄, 所以之前建立的虛擬目錄要先刪除
7.開啟後,將此專案的 Target framewpork版本改成3.5
8.接著Add Reference, 將vs2008 下的 src\BugNET_WAP\bin\ 除了BugNet.dll外都加入
9.rebuild 2010的專案


10.接著,開啟sql2008, 建一個空的Database名叫BugNet
11.回到vs2010專案, 打開web.config,將資料庫連線資訊修改一下,指到步驟10所建立的db server,可參考官網上的說明,第4點
12.展開專案目錄install, 找到 Install.aspx, 進行瀏覽
13.接著就開始執行資料庫物件建立,然後就大功告成了, 按登入用admin / password 登入即可,如以下的書面

2010年8月26日 星期四

Microsoft.ACE.OLEDB.12.0 讀excel 2010 64bit 儲存格格式

安裝了office 2010 64 bit後, 想要在 sql2008 64bit 測看看 用openrowset讀取excel的狀況

先建了一個excel檔 test.xlsx

里頭只新增了一行資料,共三個欄位, 如下圖

其中, 欄位C 實際存放的數值是0, 透過儲存格格式的自訂,將之轉換為 - 顯示


測試的語法如下
select * from
OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Format=xlsx;HDR=NO;IMEX=1;Database=C:\test.xlsx','SELECT * FROM [工作表1$] ')

結果回傳如下
 

第三個欄位應該要回傳0才對,

切回SQL 2005 32 bit, 用Microsoft.Jet.OLEDB.4.0測試

select * from
OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Format=xls;HDR=NO;IMEX=1;Database=C:\test.xls','SELECT * FROM [工作表1$] ')   

結果回傳如下

回傳結果第三欄是0無誤

看來 Microsoft.ACE.OLEDB.12.0讀到格式後的值
看來是driver的限制, 因為在32bit環境上使用Microsoft.ACE.OLEDB.12.0仍有此問題

移除office2007後,vs2008 design當掉

最近幾天開啟vs2008的web site project ,隨便開啟一隻.aspx後,整個vs2008就莫名的當掉. 如果只是開啟.aspx.cs檔, vs2008看來又很正常.

搞啥啊...
想了一想,到底這幾天有安裝什麼更新啊?....沒有啊..

直到看到這篇文章...

恍然大悟,,,YABALI....上週有把office 2007移除掉改裝office 2010

好咧加在,  原本要重裝VS2008說....

在程式集,將 Office Web Authoring Component 變更修復一下就OK了.

2010年8月12日 星期四

有長進的powerbuilder 12

因為公司玩PB的人都不在,所以今天被指派去聽PowerBuilder 12 巡迴發表會.
半天下來, 這個帶我CODING入門生涯的開發工具, 真讓人驚奇
最早開始是由PB6.0開始, 那時有位天才高手,在沒有CODING經驗的倩況下,在很短的時間就寫了一套template,有點類似像PFC的架構,但完全是自行架構的一套, 當時, 我還記得我也貢獻了一點CODING, 參考了PB附的PFC程式碼,寫了一些功能.

那時覺得PB在處理資料那塊,有玩過都應該知道DataWindow吧...做得真的很棒
雖然界面UI一點都不吸引人,但以做一個OLTP的APPLICATION而言, PowerBuilder簡直帥呆了, 到現在為此, 儘管市面上一堆開發工具, 但我仍然認為他是個快速開發Client-Server OLTP系統的好工具.

template歷經PB7,8,9,10,11,還真不是蓋的, 歷久不衰咧.

今天比較吸人的是用PB.Net寫.Net WPF, 光看到WPF三個字,就可以想𢠽到PB終於也可以寫出美美的UI囉, 再加上很久很久以前參加過PB10 Datawindow.Net, 二者一比較,簡直不像是同一父母生出來的孩子一樣, 怎麼差那麼多.
所以今天看了講師的DEMO後, 真是令人躍躍欲試啊
整個PB .Net用 Visual Studio Isolated Shell 的開發環境,
晝面設計會有相對應的xaml, code behind還是power script咧.
CODING的界面倒是做到了我以前的幻想... 就是把PB coding的界面搬到.Net上
PB依元件及事件分得好好的,要找要看挺容易的,在.Net 的codebehind檔找事件, 有時是個麻煩,如果程式碼很多,又沒做好分類的話

今天的研討會,我想唯一的缺點就是, 以Roadmap來看..如果我沒看錯, PB.Net大概落後真正的.Net技術二年,因為2012年才支援完整的sliverlight. 而陸續他也會援雲端開發. 是有在跟隨時代的潮流,只不過慢了點..

積於年少對PB的熱愛, PB.Net我想應該要來玩一下

SSRS 亂七八糟的SOAP API 配對

VS2003一直用到VS2010, 每一個版本都免不了要使用到RDL或RLDC的報表功能
所以想要整理一個可以呼叫各版本Reporting Server SOAP API的功能

結果發現, 真是有夠亂,又一整個假象....搞得我暈頭轉向的.....

SQL Server 2000 Reporting Server ReportService.asmxvs2005
SQL Server 2005 Reporting Server ReportService2005.asmxvs2008
SQL Server 2008 Reporting Server ReportService2006.asmxvs2010
SQL Server 2008R2 Reporting Server ReportService2010.asmx

以上連連看, 哪個配哪個可以WORK????

因為用VS2010開發,所以整個測試開發環境就在VS2010上,
所以要測試SQL SERVER Reporting 各版本和SOAP API各版本的組合.

為了方便, 先利用下列指令在VS command line下,將各版本的SOAP API變成一個class, 這樣在專案中就不用新增web reference

wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2010" http://sql2008r2/reportserver_sqlserver/reportservice2010.asmx?wsdl


wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2006" http://sql2008/reportserver_sql2008/reportservice2006.asmx?wsdl

wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2005" http://sql2008/reportserver_sql2008/reportservice2005.asmx?wsdl

wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2000" http://sql2000/reportserver/reportservice.asmx?wsdl

將產出的.cs檔, include到專案中就可以使用了

明明知道
VS2008中, report viewer的engine 是RS2005
VS2010中,report viewer的engine 是RS2008

但一直被sql server 版本數字的假象給擾亂....GOOGLE的關鍵字又下得不夠精準.. 



測了半天, 我已經頭暈暈了.
 
測試:
SQL Server 2008 (SP1) Reporting Server + ReportServices2005.asmx + vs2010   可以work
雜唸... ReportServices2005.asmx  為何要配Reporting Server  2008啊, 版本數字能不能匹配一下啊

原本以為ReportServices2006.asmx 是給Reporting Server 2008用得哩...在此打轉很久..空轉
MSDN的說明要好好看仔細, 不要自做聰明.....唉.....

測試:
SQL Server 2008 R2 Reporting Server + ReportServices2010.asmx + vs2010 可以work
雜唸...  Reporting Server 2008為何要配ReportServices2010.asmx , 直接跳過ReportServices2008.asmx ....版本數字能不能匹配一下啊

2010年8月9日 星期一

Informix Linked Server假象

同事在SSMS2005 (9.0.4053 SP3)建立一個linked server的連線到informix
安裝的ODBC版本是IBM Informix Client-SDK 3.5
ODBC的環境設置及測試連線都OK,
但在SQL SERVER LINKED SERVER上新增一個設定後,通常我們都會點開catalog目錄,看一下是不是設定成功吧......
結果,一點選catalog目錄,卻彈出下列訊息..

TITLE: Microsoft SQL Server Management Studio

------------------------------
Failed to retrieve data for this request. (Microsoft.SqlServer.SmoEnum)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476
------------------------------
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
The OLE DB provider "SQL Server" for linked server "(null)" reported an error. One or more arguments were reported invalid by the provider.
Cannot obtain the schema rowset "DBSCHEMA_CATALOGS" for OLE DB provider "SQL Server" for linked server "(null)". The provider supports the interface, but returns a failure code when it is used. (Microsoft SQL Server, Error: 7399)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.4053&EvtSrc=MSSQLServer&EvtID=7399&LinkId=20476
------------------------------


很奇怪咧.....相同的ODBC及環境設定,在我的機器上卻是OK...

比較了二者的差異只在於,他是用SSMS 2005連結到SQL2005 DB SERVER來建LINKED SERVER, 而我則是在SSMS 2008連線到SQL2005 DB SERVER建立LINKED SERVER....
(我的本機同時安裝了2008 及2005,所以習慣以SSMS2008來開啟專案)

怪哉, 二者都是連到SQL2005 DB建立LINKED SERVER, SSMS版本不同會有差嗎?

試了一下, 改用SSMS2005 建立LINKED SERVER,
幹.........還真的是有差, 點開catalog時,也同樣發生了上面的錯誤訊息

突然間, 熊熊想到, 以前好像碰過這個問題, 雖然無法瀏覽catalog, 但實際上, 直接下一段openquery的查詢卻是OK的....

下一次,就別再被騙了....

2010年7月30日 星期五

http 方式連結 analysis server 之再測試

上次可以用網頁owc方式採http方式連結analysis server後.

現在人客說, 想要依不同的登入使用過濾OWC FILTER AREA中的機關list,

真是天殺的需求.

爬了許多文後.....整理如下,有二種做法

第一種, 透過網頁OWC 的屬性設定
1.先到MS KB上去COPY範例
2.在window_onload事件中,找到這一行, aStates = Array("Cleared", "Checked", "Gray"), 把他給刪掉
3.然後加上這三行
   oView.FilterAxis.FieldSets("Product").AllIncludeExclude = c.plAllExclude
   oView.FilterAxis.Fieldsets("Product").fields("Product Family").includedmembers = Split("Food",",")
   PTable.AllowFiltering = false
4.測試網頁, 進入後,你會看到在filter area的product 維度,只有Food被勾起來了,而且,你再也不能對這個維度做任何的修改, 因為 PTable.AllowFiltering = false

這個方法對人客不太實用, 因為會連同其他放在filter area的維度也跟著無法修改了.... 沒屁用,但測出了如何coding filter memers

第二種, 利用as本身的角色授權功能
1.先在http olap虛擬目錄的認證方式改成 基本驗證,
2.在網頁owc 連結as的connection string , 要加入使用者及密碼,  如下
"Data Source=http://SQL2000/OLAP/;Initial Catalog=TEST;Provider=MSOLAP.2;User Id=normaluser;Password=123456;"
按照這篇文章Basic authentication 那段的說明 , 必需使用基本驗證 加上connection string 中的使用者及密碼,才能透過http方式模擬連線使用者.
所以, 既然是走明碼傳輸, 文章也建議你要採用SSL方式,加密傳輸.
3.依需求, 在as中去定義不同的角色, 把維度資料的瀏覽做權限控管
4.最後,想辦法在網頁上動態依登入的使用者去替換connection string 中的使用者及密碼

這個方法人客應該比較尬意, 但測試後, 在AS 2000 OK,可以隨著使用者的切換顯示維度資料
但AS 2005 的角色雖然設定了.(方法和AS2000大同小異)...但網頁卻沒有隨著使用者切換而顯示維度資料

比較二者的差異
1.AS 2000那台主機不在AD中, AS2005那台主機則在AD Domain中
2.網頁測試機本身雖不在AD網域中,但其登入本機的帳號及密碼與AD上一組帳號及密碼相同 所以OWC 連線可以正常, 也可以順利看到預設的維度.

3.但在其他台測試機器開相同網頁,則出現以下錯誤
---------------------------
Microsoft Office 樞紐分析表清單
---------------------------
發生錯誤 0x80004005。沒有進一步的資訊。

JS錯誤內容為 " ActiveX元件,無法產生物件.."

4.相同的測試網頁, 放在windows 7 + IE8 的環境下,且符合上述2的環境下時, oView.FilterAxis.Fieldsets("Product").fields("Product Family").includedmembers = Split("Food",",")
這一段程式碼, 竟然出現, JS錯誤訊息:" 陣列索引超出範圍"

原來, IE8 + SSAS2005  ,  Split有問題哩.. 改成以下 就OK囉..
oView.FilterAxis.Fieldsets("Product").fields("Product Family").includedmembers = Array ( "Food", "Drink" )

然後, 整個OWC的速度超級無敵慢的.....為什麼連到SA2000的CUBE就很快呢....

亂亂亂.....

在網域環境中 , SSAS 2005 的權限設定 , OWC的顯示,  這款代誌金不係呆人想得卡哩啊簡單啦.....


待續

2010年7月28日 星期三

C# extend 方法

透過extension方式,可以擴充System.DateTime的方法,
coding時, 直接輸入DateTime類型物件,intelligence就會自動出現這個自訂義的方法囉..

//將西元日期轉換為帶format的國曆日期
public static class Datetime
{
     public static string ConvertToCDate( this DateTime dt)
     {
         return string.Format("{1}{0}{2:D2}{0}{3:D2}", new object[] { @"/" (dt.Year - 1911), dt.Month, dt.Day });}
     }
}

使用方法:
return DateTime.Now.ConvertToCDate();

回傳99/07/28

2010年7月25日 星期日

VMWare安裝x64作業系統

在Lenovo T400 , host是win 7 profession x64, 想要在VMWare 7.0 安裝 X64的作業系統,得要做幾件事
1.先將BIOS 的CPU VT開啟, 在T400上有二個VT選項
  開啟後記得要用關機後再開機... 如果只是重新啟動設定是沒用的..
  我的英文很差.... 一直看不懂VMWare的提示, 說我的機器有支援VT但VT目前為diabled
  啊我明明就有改了BIOS的設定啊....
  提示可能原因中,其中有 一項...power-cycle your computer....原來是要關機再開機...(汗.....)

2.安裝VM Machine時,要選擇windoes server 2008 X64, 我也很白吃....一直選windoes server 2008

3.當然啦, 你的安裝光碟片必需也要是windoes server 2008 X64 版啦......這不是廢話...

2010年7月23日 星期五

Informix onstat

-u 列出session id


-g ntt 查看各session開始時間,及最後活動時間

-g ses sessionID  , 查看session SQL SYNTAX

-g sql sessionID , 查看session SQL 目前處理狀況(SELECT,INSERT, DELETE ...?)

-uk 查看鎖定狀況, 看有IX(exclusive lock)的, 而且為0者, 找到其tabID ,再去systab查tablename

-p 看系統狀況

2010年7月14日 星期三

identity欄位的資料轉入

tabTest 和tabBackup有相同的欄位結構, primary key皆設為identity
insert into tabTest select * from tabBackup
執行時,會有如下錯誤

XXX的識別資料行其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定。

常遇的問題,但每次都會忘了要怎麼做.

set IDENTITY_INSERT tabBackup on
Go

insert into tabBackup ( col1, col2, col3)
select * from tabTest
Go


所以SQL Server 的訊息寫的挺清楚
當使用了資料行清單
IDENTITY_INSERT 為 ON 時
這讓我想起,人客有時跟我哭夭說, 系統很爛,我只是按個BUTTON資料怎麼會不見咧..

可是明明按下BUTTON時,系統都有confirm 警告說會刪除資料,

你要按下確定, 我有什麼辦法啊..... 機車咧....

所以訊息要好好看啦

2010年7月11日 星期日

Dos Command , systeminfo

在DOS Command下, 利用 systeminfo來查看系統資訊 
以我的機器測試,結果輸出如下, 挺詳細的咧, 還列出曾上過的hotfix

主機名稱:             XXX
作業系統名稱:         Microsoft Windows 7 專業版
作業系統版本:         6.1.7600 不適用 組建 7600
作業系統製造商:       Microsoft Corporation
作業系統設定:         獨立工作站
作業系統組建類型:     Multiprocessor Free
註冊的擁有者:         XXXXX
註冊公司:            
產品識別碼:           55041-OEM-8992671-00437
原始安裝日期:         2010/1/30, 下午 07:58:54
系統開機時間:         2010/7/12, 上午 08:40:10
系統製造商:           LENOVO
系統型號:             2767PM1
系統類型:             x64-based PC
處理器:               已安裝 1 處理器。
                      [01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2801 Mhz
BIOS 版本:            LENOVO 7UET79WW (3.09 ), 2009/10/13
Windows 目錄:         C:\Windows
系統目錄:             C:\Windows\system32
開機裝置:             \Device\HarddiskVolume2
系統地區設定:         zh-tw;中文 (台灣)
輸入法地區設定:       zh-tw;中文 (台灣)
時區:                 (UTC+08:00) 台北
實體記憶體總計:       3,992 MB
可用實體記憶體:       868 MB
虛擬記憶體: 大小上限: 7,982 MB
虛擬記憶體: 可用:     3,888 MB
虛擬記憶體: 使用中:   4,094 MB
分頁檔位置:           C:\pagefile.sys
網域:                 WORKGROUP
登入伺服器:           \\XXX
Hotfix:               已安裝 47 Hotfix。
                      [01]: KB971033
                      [02]: KB958488
                      [03]: KB971468
                      [04]: KB972270
                      [05]: KB973525
                      [06]: KB974332
                      [07]: KB974431
                      [08]: KB974476
                      [09]: KB974571
                      [10]: KB975467
                      [11]: KB975496
                      [12]: KB975560
                      [13]: KB976098
                      [14]: KB976264
                      [15]: KB976422
                      [16]: KB976662
                      [17]: KB977074
                      [18]: KB977863
                      [19]: KB978207
                      [20]: KB978251
                      [21]: KB978262
                      [22]: KB978506
                      [23]: KB978542
                      [24]: KB978601
                      [25]: KB978637
                      [26]: KB979099
                      [27]: KB979306
                      [28]: KB979309
                      [29]: KB979482
                      [30]: KB979559
                      [31]: KB979683
                      [32]: KB979900
                      [33]: KB979916
                      [34]: KB980182
                      [35]: KB980195
                      [36]: KB980218
                      [37]: KB980232
                      [38]: KB980302
                      [39]: KB980408
                      [40]: KB980846
                      [41]: KB981078
                      [42]: KB981332
                      [43]: KB981793
                      [44]: KB982381
                      [45]: KB982519
                      [46]: KB982632
                      [47]: KB982666
網路卡:               已安裝 6 NIC。
                      [01]: Intel(R) 82567LM Gigabit Network Connection
                            連線名稱:           區域連線
                            DHCP 已啟用:          是
                            DHCP 伺服器:        192.168.0.1
                            IP 位址
                            [01]: 192.168.0.111
                            [02]:XXXXXXXXXXXXXXXXXXXXX
                      [02]: Intel(R) WiFi Link 5300 AGN
                            連線名稱:           無線網路連線
                            狀態:               媒體已中斷連線
                      [03]: VMware Virtual Ethernet Adapter for VMnet1
                            連線名稱:           VMware Network Adapter VMnet1
                            DHCP 已啟用:          否
                            IP 位址
                            [01]: 192.168.232.1
                            [02]: fXXXXXXXXXXXXXXX
                      [04]: Bluetooth Device (Personal Area Network)
                            連線名稱:           Bluetooth 網路連線
                            狀態:               媒體已中斷連線
                      [05]: Microsoft Virtual WiFi Miniport Adapter
                            連線名稱:           無線網路連線 2
                            狀態:               媒體已中斷連線
                      [06]: VMware Virtual Ethernet Adapter for VMnet8
                            連線名稱:           VMware Network Adapter VMnet8
                            DHCP 已啟用:          否
                            IP 位址
                            [01]: 192.168.59.1
                            [02]:XXXXXXXXXXXXXXX

temp table and table variables

temp table 包含local (#tmpTest, by sessionid) 以及global (##tmpTest) 都是 physical tables, 用法就像一般的table一樣,
1.可以alter,drop
2.可以create index, pk
3.transaction logs也會記錄其變動
4.loacal temp table 在此session內都可使用


table variables
1.可以建立 pk
2.無法create non-clustered Indexes
3.transaction logs不會記錄其變動 ,不管 table variables 是否有包含在transaction中, 自已都是獨立的
4.沒有統計資訊
5.一執行完畢馬上消失
6.使用時機為適用在較小資料且不考慮index 時的暫存處理

什麼叫較小的資料處理? 見人見智吧,自已要實測. 我自已大都用在user defined function 回傳table,或者執行Stored procedure 回傳資料集 , 例如, insert into @tmp exec zspMyProcedure

不同欄位順序的index差異?

最近同事一直在做SQL Server 2000的效能測試...看他很HIGH的樣子, 我一直在想 "代誌是不是搵想A卡哩啊簡單" ?.

所以我也花了時間,來看看他給我的測試
這個測試是有關index 欄位順序調整或合併, 是否有助於效能提昇
他給的測試方法是觀察Logical Reads 和Physical Reads
由這二個值的觀察,可洐生出了SQL Server:Buffer Manager - Buffer Cache Hit Ratio
按照他給的公式定義 SQL Server:Buffer Manager - Buffer Cache Hit Ratio= logical reads – physical reads)/logical read * 100%
所以數值愈大,代表資料直接由data buffer 也就是記憶體的比例愈大, 相對減少對DISK 的讀取.

問題是什麼情況下, Buffer Cache Hit Ratio 會變大?
要嗎是Logical Reads變大, 要嗎是Physical Reads變小.
但如果以同一個查詢語法來看,在不清除buffer的情況下, 理論上 Logical Reads應該是要相同才對, 而且Physical Reads應該在第一次查詢時, 會變成0. 當然, 假設的前提是, 只有一個測試連線, 以上結論才會成立吧.而且,這個counter也需在一段時間的記錄後才能取得到較正確的值, 所以在測試階段,只先針對一個使用者一個相同的SQL來測試, 這個數值一點幫助也沒有.

google了一些資訊,還是做了一下測試, 在只有我一個使用者的情況下...
1.先設定SET STATISTICS IO ON 及SET STATISTICS TIME ON, 以返回每個查詢的統計資料和執行時間
2.每個查詢前,皆先清除buffer , 包含dirty buffer也須清除(可看MSDN說明)
CHECKPOINTGo
DBCC DROPCLEANBUFFERS
Go
DBCC FREEPROCCACHE
Go

依不同的index建立進行測試,分別select 所有欄位及部份欄位來查看Logical Reads 和Physical Reads

為什麼要重建index並整合index?
原本有二個index, 其中一組是由7個欄位組成的index, 另一組則是3個欄位組成的index.
index1 = (col1, col2, col3,col4,col5,col6,col7)
index2 = (col7, col1, col3 )
當初建立這二個index的用意在於, 第一組為unique index, 第二組則為常用的insert/delete/select條件. 當時是覺得(只是自已理論上的推測,也沒有經過實測和實證....)建立index時的欄位順序應該會差別,所以就建了二組
同事測試後,覺得應該只要建一組就好, 所以最後將index改為index3 (col7, col1,col3, col2, col3,col4,col5,col6,col7) 想要看看有沒有改善.

所以, 這次的重點就在測試index調整後到底有沒有改善 Logical Reads了
因為相同的查詢,所傳回的Logical Reads應該要相同, 所以在改變了index後,觀察Logical Reads是否有降低應該就可以知道改善的程度.
測試SQL除返回欄位數不一外,其WHERE條件皆相同, 皆使用到 col7, col1, col3
不同的返回欄位數也有差, 端看其是否符合covering index的使用,可參考這篇文章Tips on Optimizing Covering Indexes

結果如下:
返回所有欄位時,
index3:
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7842,實體讀取 3,先讀讀入 4252。
伺服器執行次數: CPU時間 = 375 ms,經過時間 = 109339 ms。

index1+index2
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7804,實體讀取 3,先讀讀入 4258。
伺服器執行次數: CPU時間 = 422 ms,經過時間 = 109294 ms。

返回部份較少欄位(含index 部份欄位col1 + 無index的欄位)
index3
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7842,實體讀取 2,先讀讀入 4296。
伺服器執行次數: CPU時間 = 172 ms,經過時間 = 8443 ms。

index1+index2
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7804,實體讀取 3,先讀讀入 4258。
伺服器執行次數: CPU時間 = 219 ms,經過時間 = 3570 ms。

返回部份較多欄位(含index 部份欄位col7, col1,col3+ 無index的欄位)
index3:
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7842,實體讀取 2,先讀讀入 4296。
伺服器執行次數: CPU時間 = 203 ms,經過時間 = 5573 ms。

index1+index2
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7804,實體讀取 3,先讀讀入 4258。
伺服器執行次數: CPU時間 = 219 ms,經過時間 = 3570 ms。

很粗糙的測試,得到的結論是, 在記憶體配置不變的情況下,合併成一個index 會讓Logical Reads變大,Physical Reads變小....所以合併成一個index應是有幫助的
哈哈...看錯記錄, 合併成一個index會讓Logical Reads變大


最後個人的感想是,...這樣的測試資訊,十分不足,很片面, 所以tuning這款代誌金正不是笨人想A卡里啊簡單
因為我們忽略了許多因素, 光是自已一個人做測試時, 就有很多的假設前提, 更何況是尖峰刻,user可是殺紅了眼在搶resource啊.

效能調校真的很花時間, 沒有意志力就甭做DBA了, 拿來做飯後閒餘時的興趣研究,真的可以打發不少時間..

2010年7月8日 星期四

RDLC 匯出PDF中文問題

同事給了一個在windows 2003 IIS6 rdlc 匯出的pdf檔
在windows 7 的環境下開啟....中文字全部都變成了亂碼.

以前遇到的亂碼通常都是字型未設成細明體(MingLiU)所致
但這次的狀況倒還是第一次遇到. 而且只有細明體才會有這個問題,設成標楷體的rdlc匯出時,看來正常.

後來也反向測試了一下, windows 7 IIS7 rdlc匯出的pdf檔, 拿到windows 2003 或xp 也都會變成亂碼
如果用acrobat 5.0開啟時還會有"無法找到或建立字型『MingLiU』‧某些字元法正確顯示或列印"的訊息出現, 用acrobat 9.3 則無此提示訊息.

大家反覆測了一整天, GOOGLE了半會,也沒啥solution...

今天就反應給微軟, 且待結果囉..

2010/07/14: 微軟回覆說.....這是已知的BUG, 在VS2010已解決, 建議改用VS2010.... 或等待VS2008的BUG FIX
測了一下, VS2010的RDLC, 部署到win2003 IIS 6或win7 IIS7環境,所匯出的PDF在win2003,xp,win7細明體中文皆可正常顯示.

唉, vs2008沒用多久,馬上又進入vs2010了, 技術更新的周期愈來愈短, 我跑得愈來愈慢...哈.

2010/07/15, 微軟說, 這是已知BUG, 細明體glyph ID在win 7已和之前不相同,所以會有對照上的問題, 但標楷體的glyph ID在win 7則維持不變, 所以要嗎上vs2010,要嗎改用標楷體.....vs2008會不會在下版sp fix bug? 可能不會吧......結案.
最後的解決方法是, 安裝virtual  pdf printer, 用列印的方式轉出PDF檔, 這樣連之前造字無法正常顯示的問題也一併解決.

2010/08/12, 看到路人甲的留言,照著這篇文章的說明,
1.先去下載Microsoft Report Viewer 2010 Redistributable Package
2.在dos command下, cd c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\10.0.*
3.copy Microsoft.ReportViewer.WebForms.dll c:\temp\
4. cd c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\10.0*
5.copy Microsoft.ReportViewer.Common.dll c:\temp\
6.open your web  project, add refreance 上述二個dll檔
7.接著, 連程式碼都不用改喔, 只要在web.config檔置換下列幾個設置,然後重新build project
system.web 下的assemblies tag, 找到add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0,.....及add assembly="Microsoft.ReportViewer.Common, Version=9.0.0.0

system.web 下的pages tag下的controls tag, 找到add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0

system.web 下的httpHandlers tag,找到add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0,....
以上都把9.0.0.0改成10.0.0.0

system.web 下的buildProviders tag, 找到 add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0,  ...

移除掉這行

如果是要部署到IIS7.0,
在system.webServer 下的handlers tag, 找到add name="Reserved-ReportViewerWebControl-axd" path="Reserved.ReportViewerWebControl.axd" precondition="integratedMode" resourcetype="Unspecified" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" verb="*"

把這行改成
add name="ReportViewerWebControlHandler" path="Reserved.ReportViewerWebControl.axd" precondition="integratedMode" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" verb="*"

8.測試一下你的報表囉......

原則上如果原本的rdlc是在SSRS 2005 base下開發, reportviewer 10.0也可以很順利的呈現,同時仍可以vs2008的report designer 進行設計

同時,我也順便測了一下, 用SSRS 2008 先設計出.rdl的報表(主要是有tablix), 然後放到vs2008的專案中,把副檔名改成.rdlc,一樣也可以正常的呈現.(我喜歡用這種方法來設計rdl,一旦報表完成後,只要把.rdl改成.rdlc就可以了, 很方便進行報表的開發及測試)

比較美中不足的是, 在vs2008的report designer中,無法順利開啟SSRS 2008 base的rdlc檔

不知vs2008上的report designer是否也能夠使用10.0的版本?

總之, 路人提供的解決方法, 真是太棒了, 真是一舉二得. 解決了之前PDF的問題, 又可使用SSRS 2008的報表新功能.

2010年7月5日 星期一

Dos Command , DIR

想要整理出專案中某一時間後有異動過的 .cs和.aspx檔清單.

不知道windows 7有沒有這個功能. 只好先用一點撇步.

先打開winrar, 在時間頁籤下,有個選項叫 要處理的檔案, 在包含時間選擇修改時間晚於...



把某段時間後的檔案找出來壓縮成 .rar

接著解壓縮到一個新的目錄, 利用 dos command

dir /S *.cs *.aspx > a.txt

如此.就可以快速產出含目錄說明及包含檔案數的異動程式清單了

如果不想要包含目錄結構可以下

dir /S / B *.cs *.aspx > a.txt

這樣就只會列出包含完整路徑的清單 了

解了燃眉之急

錢就是要這樣流通

 轉貼....朋友寄來的MAIL.... 真有意思...


太陽高掛,街道無人,時機歹歹,每個人都債臺高築,靠信用度日。
這天,從外地來了一位有錢的旅客,正開車通過鎮上。他在一家汽車旅館前停車,進去後,拿出一張 1000 元鈔票放在櫃台,說他想先看看樓上的房間,挑一間合適的過夜。
就在該名先生上樓的時候,店主抓了這張 1000 元鈔,跑到隔壁屠戶那裡付了他欠的錢。屠夫有了 1000 元,橫過馬路付清了欠豬農的錢。
豬農拿了 1000 元,奔向飼料和燃料供應商,也付清了他欠的錢。那個在農會做事的老兄,拿到 1000 元,趕忙去付清他召妓的錢(經濟不景氣的時候,當地的服務業也不得不提供信用服務)。有了 1000 元,這名妓女衝到旅館付了她所欠的房間錢。旅館店主把這 1000 元放到櫃檯上,以免旅客下樓時起疑。

此時這位旅客下樓來,拿起 1000 元鈔票,聲稱客房沒一間滿意的,他把錢收回,塞進口袋,走了。
這一天,表面看起來,沒有人生產了什麼東西,也沒有人得到任何東西。但是現在全鎮的債務都清了,而且以更樂觀的態度面對未來。
各位女士先生們,錢就是要這樣流通。

2010年6月27日 星期日

SQL Server MINUS and INTERSECT

SQL Server 2005 後,提供EXCEP 和INTERSECT, 功能和ORACLE的MINUS, INTERSECT相同

EXCEP 找出存在於第一個子集,但不存在於第二個子集的筆數
INTERSECT 找出皆存在於二個子集中的筆數

這二個方法很方便查找有多個欄位的二個子集差異


以下是SQL 2008 ONLINE HELP說明
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/b1019300-171a-4a1a-854f-e1e751de3565.htm

The following query returns any distinct values that are returned by both the query on the left and right sides of the INTERSECT operand.

USE AdventureWorks;
GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)


The following query returns any distinct values from the query to the left of the EXCEPT operand that are not also found on the right query.

USE AdventureWorks;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)

以前沒有這種比較的需求, 也沒想過會有EXCEPT,INTERSECT這種語法想了一下,使用left outer join , right outer join  ,inner join 或exists 可以做出同樣的結果嗎???

簡單的測試....., select 的欄位中,含有NULL 值, 則預期結果大不相同

--測試資料
select * into #test1 from
(select  'A11' as col1 , cast(null  as varchar(10))  col2 ,'A31'  col3
union all
select 'A21', null ,'A33'
) a
select * into #test2 from
(select  'A11' as col1 , 'A12'  col2 ,'A31'  col3
union all
select 'A21', null ,'A33'
) a

--EXCEPT
select * from #test1
except
select * from #test2

--回傳結果找出一筆不同
--col1    col2    col3
--A11    NULL    A31

--LEFT OUTER JOIN
select *
from #test1 a left outer join #test2  b
   on a.col1 = b.col1
and a.col2 = b.col2
and a.col3 = b.col3

--回傳結果找出二筆 ,若過濾 掉 b.col1 is null, 則無符合筆數
--A11    NULL    A31    NULL    NULL    NULL
--A21    NULL    A33    NULL    NULL    NULL

轉貼 SQL Server Hints

MSSQLTIPS
Using Hints To Test Indexes in SQL Server

強迫使用某一index查看查詢效能變化, 主要是觀察execution plan 中, query cost是否有顯著的下降

使用方式:

SELECT NationalIDNumber
FROM HumanResources.Employee
WITH (INDEX (PK_Employee_EmployeeID))
WHERE Title = 'Stocker'

2010年6月24日 星期四

安裝 SQL Server 2008 R2 的硬體和軟體需求

唉......
永遠都搞不清楚微軟各項產品的版本適合安裝在什麼樣的作業系統

關於SQL SERVER 2008 R2 各版本可安裝的作業系統,可參考 MSDN 說明

我關注這點

SQL Server 2008 R2 Enterprise (64 位元) x64
處理器類型:
•最小值:AMD Opteron、AMD Athlon 64、具有 Intel EM64T 支援的 Intel Xeon、具有 EM64T 支援的 Intel Pentium IV

處理器速度:
•最小值:1.4 GHz
•建議值:2.0 GHz 以上

作業系統
Windows Server 2003 SP2 64 位元 x64 Datacenter
Windows Server 2003 SP2 64 位元 x64 Enterprise
Windows Server 2003 SP2 64 位元 x64 Standard
Windows Server 2003 SP2 64 位元 x64 Web
Windows Server 2008 SP2 64 位元 x64 Datacenter
Windows Server 2008 SP2 64 位元 x64 Datacenter (不含 Hyper-V)
Windows Server 2008 SP2 64 位元 x64 Enterprise
Windows Server 2008 SP2 64 位元 x64 Enterprise (不含 Hyper-V)
Windows Server 2008 SP2 64 位元 x64 Standard
Windows Server 2008 SP2 64 位元 x64 Standard (不含 Hyper-V)
Windows Server 2008 SP2 64 位元 x64 Web
Windows 2008 R2 64 位元 x64 Datacenter
Windows 2008 R2 64 位元 x64 Enterprise
Windows 2008 R2 64 位元 x64 Standard
Windows 2008 R2 64 位元 x64 Web
Windows Server 2008 R2 x64 for Windows Essential Server Solutions

關於SQL Server 2008 R2各版本提供的功能差異,請參考MSDN說明

版本真夠多的。。。。 

2010年6月21日 星期一

tar指令

windows telnet 環境下,無法使用zip指令
切換回ssh 模式,改用tar來產生壓縮檔

tar -cvf filename.tar file.bak

其中 filename.tar 為要產生的壓縮檔名
file.bak 為被壓縮的原始檔名

AS 2000 ,KB 901200

利用OPENQUERY執行Analysis Server 2000 MDX select 時,會有類似下列的錯誤訊息

伺服器: 訊息 7358 層級 16,狀態 1 行 1



無法執行查詢。OLE DB 提供者 'MSOLAP' 未提供適當的介面來存取文字、 ntext 或 image 資料行 '[MSOLAP] [儲存] 儲存區 [縣/市] [MEMBER_CAPTION]'。


OLE DB 錯誤追蹤 [非介面時發生錯誤: 無法取得儲存體介面 BLOB 的資料行: ProviderName = 'MSOLAP' 表格名稱 = '[MSOLAP]' ColumnName = ' [儲存] 儲存區 [縣/市] [MEMBER_CAPTION] ']。

詳細內容參考 KB 901200, http://support.microsoft.com/kb/901200

如KB所言,此問題在 安裝 Microsoft SQL Server 2000 Service Pack 4 (SP 4) 之後會發生

更新後SQL2000版本為
Microsoft SQL Server  2000 - 8.00.2148 (Intel X86)   Jul  7 2005 20:33:10   Copyright (c) 1988-2003 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

2010年6月8日 星期二

SSIS dtexec 參數指令

dtsexec /?
command line 列出常用的選項

選項不區分大小寫。連字號 (-) 可以用來取代斜線 (/)。
/Conf[igFile]       Filespec (把同一個project會用到的設定都維護在.dtsConfig)
/De[crypt]          Password (package設EncryptSensitiveWithPassword,執行時再指定解密密碼)
/F[ile]             Filespec 
/Set                PropertyPath;Value


my command line:

DTEXEC /FILE "C:\Test.dtsx" /DECRYPT "test2010" /CONFIGFILE "C:\test.dtsConfig"   /SET "\package.variables[gsGuid].Value";"54A2A383-28A6-4227-AA9F-21A8BDFEB853" /SET "\package.variables[gsType].Value";"typeI"




其中,gsGuid是用來寫入sql server uniqueidentifier欄位, 試了一下, 參數前後加大括弧也OK


DTEXEC /FILE "C:\Test.dtsx" /DECRYPT "test2010" /CONFIGFILE "C:\test.dtsConfig"   /SET "\package.variables[gsGuid].Value";"{54A2A383-28A6-4227-AA9F-21A8BDFEB853}" /SET "\package.variables[gsType].Value";"typeI"

不過.....如果這個gsGuid值,要同時給不同DB使用, 則在傳入時,就不要傳入有加大括弧的參數值,以免非SQL SERVER DB資料庫寫入時,發生截斷的問題....因為長度就會超過varchar(36)了.







SSIS 字串轉型成GUID

在SSIS dataflow task 的 drived column  ,將字串轉型為GUID時,前後要加大括弧

(DT_GUID)("{" + @[User::gsGuid] + "}")

2010年6月7日 星期一

SSRS 造字匯出pdf

報表內容含造字(EUDC,End-User Defined Characters), 匯出EXCEL都沒問題
唯獨匯出pdf不成功

試了RS designer 的三個版本
RS 2000 designer ,造字preview 與匯出EXCEL正常,匯出PDFOK , 但造字變成 !
RS2005 designer , 造字preview 與匯出EXCEL正常,匯出PDFOK, 但造字變成口
RS2008 designer , 造字preview 變成口, 但匯出EXCEL造字顯示正常,
匯出PDF時, 出現以下訊息
 ---------------------------
Export Error
---------------------------
An error occurred during local report processing.
CreateFontPackage failed: Win32 error:1006

也試用了ASPOSE的 Aspose.Pdf for Reporting Services, 造字仍無法顯示

最後試了, VS2010 report viewer. 造字preview 與匯出EXCEL與WORD正常,匯出PDFOK, 但造字變成口
 
OO, 目前看來是無解

2010年6月1日 星期二

Dos command 開啟網芳

這個服務關掉後,AS 2000就無法使用DSO連線
所以每個月在產生新的partition時,要先把這個服務給開起來,然後做完partition creation後,再關閉這個服務
當然啦, 一定要用具olap administrators的domain user登入來執行partition creation才行喔

sc config LanmanServer start= auto


net start LanmanServer


net stop LanmanServer /Y

sc config LanmanServer start= disabled

DOS command 取國曆年月

首先先參考SS64的方法,取得系統日期
雖然看不太懂...但模仿一下也是OK的啦,能取得我要的國曆年月就好

@echo off&SETLOCAL
:: This will return date into environment vars
:: Works on any NT/2K/XP machine independent of regional date settings
:: 20 March 2002
FOR /f "tokens=1-4 delims=/-. " %%G IN ('date /t') DO (call :s_fixdate %%G %%H %%I %%J)
goto :s_print_the_date
:s_fixdate
if "%1:~0,1%" GTR "9" shift
FOR /f "skip=1 tokens=2-4 delims=(-)" %%G IN ('echo.^date') DO
 (set %%G=%1&set %%H=%2&set %%I=%3)
goto :eof
:s_print_the_date
set /a yy=%yy%-1911
set /a ym=%yy%%mm%

echo Month:[%mm%] Day:[%dd%] Year:[%yy%] YM:[%ym%]
ENDLOCAL&SET mm=%mm%&SET dd=%dd%&SET yy=%yy%

以上,紅字部份是我要的國歷年月囉...

2010年5月27日 星期四

變數的資料型態

多加寫了一段union的sql,該sql總共有6個欄位,
用一個foreach loop task來接收這個sql result set中每一筆的欄位值
結果,重新執行package後, 在loop里的script task出現"長度超過"的錯誤

逐一debug後,才發現新加的union sql中,某個欄位是一個計算欄位, 剛好, 符合的筆數都是由新增的union 中的sql所取得

原本在ssis是用一個int16的變數去接收, 由於sql 中,該計算欄位應是回傳integer型態,所以造成script task 中用到這個變數值時,己經是讀取到不正確的數值

後來在sql中,將該欄位轉型為smallint後,重跑package後就ok了.

因此,最好要確認union select 回傳的型態和ssis variable的型態要對應正確

2010年5月10日 星期一

Excel openrowset 奇怪的問題(續)

人客家的SSIS,一段時間後都會出現以下的錯誤.
剛開始一頭霧水,以為是上傳的EXCEL檔有問題,
後來發現,原本在SSMS使用正常的excel openrowset, 在同時間也無法使用.

檢查了EXCEL檔案內容,檢查了openrowset的語法, 都沒更動過也沒寫錯...怪哉.


所有的錯誤都出現在Data Flow Component 的OLEDB Source, 里頭放的是一段excel openrowset的語法:

SSIS 錯誤碼 DTS_E_OLEDBERROR。發生 OLE DB 錯誤。錯誤碼: 0x80040E14。
有 OLE DB 記錄可用。來源: "Microsoft SQL Native Client" Hresult: 0x80040E14 描述: "無法初始化連結伺服器 "(null)" 的 OLE DB 提供者 "Microsoft.Jet.OLEDB.4.0" 的資料來源物件。"。
有 OLE DB 記錄可用。來源: "Microsoft SQL Native Client" Hresult: 0x80040E14 描述: "連結伺服器 "(null)" 的 OLE DB 提供者 "Microsoft.Jet.OLEDB.4.0" 報告了錯誤。提供者並未給予任何關於錯誤的資訊。"。

"元件 "Excel OpenRowset" (1230)" 驗證失敗,傳回驗證狀態 "VS_ISBROKEN"。

一或多個元件驗證失敗
工作驗證期間發生錯誤。

載入封裝檔案 "D:\SSIS\subImport.dtsx" 時發生錯誤 0xC0012050。ExecutePackage 工作發生封裝驗證失敗。無法執行封裝。


最後,什麼都沒做,重新啟動SQL Server Services, 又回復正常.

這次,我依照之前遇到的怪問題的解法方法,
在機碼
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Providers\Microsoft.Jet.OLEDB.4.0 下新增一個名稱
DisallowAdHocAccess = 0

重新啟動SQL Server ,再觀察一段時間看看吧

2010年5月3日 星期一

SSMS 2008修改表格

在SSMS 2008的介面設計TABLE時, 如果新增或刪除欄位後按下儲存, 會出現
Saving changes is not permitted. The changes you have mad require then following tables to be dropped and re-created.......

懶得貼圖了

GOOGLE看到這篇文章 , 才知道, 訊息視窗右上方除了一個X之外,還有一個?, 按下去之後, SQL Server的HELP就告訴你要怎麼解決囉, 如下...

To change this option, on the Tools menu, click Options, expand Designers, and then click Table and Database Designers. Select or clear the Prevent saving changes that require the table to be re-created check box.

2010年4月27日 星期二

SSRS render excel 怪事

有一張用SSRS2005做出來的表,在TABLE HEADER要依資料動態顯示不同的TITLE

在IE 瀏覽看來都很正常,但匯出到EXCEL 2003 時,發現TITLE後面多了一個空白,以致於匯出到EXCEL 2003後,表頭內的文字變成了二行,其中第二行是空白, 但匯出PDF和列印都是正常

必須手動在這個儲存格中,後面的空白刪掉,表頭才會顯示正常

因為匯出EXCEL 2003才有這個問題,而且匯出EXCEL 2007沒有這個問題, 所以一直以為是RDL render 的問題

由於表頭的值是依dataset 的某VARCHAR欄位動顯示出來的, 所以回頭去看TABLE內的欄位值時,也沒發現有任何空白存在.

直到, 用SQL LEN function去查看欄位的長度時,才發現,原本應該只有長度9的內容值,竟然變成10

光是用眼睛看,真的明明只有看到 9個中文字啊...

再查了一下,   select len(replace(orgnDescription,char(13),'')) from organization


原來欄位內容值最後面多了一個換行符號(當初這個資料是轉進來的)
執行更新語法後, update organization set orgnDescription = replace(orgnDescription,char(13),'')

再查詢報表,匯出EXCEL , 問題就解決了.

所以開發後,要測試,除了IE版本要比照人客的環境外,連OFFICE也得要一致才行啊

2010年4月21日 星期三

SQL 2005 Job Mail 通知

SQL 2005後,提供了Database Mail的功能,可以利用SMTP MAIL設定JOB執行狀況的EMAIL通知

在SQL 2000的時代,未曾使用過SQL MAIL, 既然SQL 2005有了這麼方便的SMTP MAIL功能,那就來試看看, 因為主要是想要知道每天排程的JOB到底是成功還是失敗. 不然每次都等人客打電話來通知,實在是太沒面子了.

1.開啟SQL SERVER 2005 的Database Mail,
   sp_configure 'show advanced', 1;
   sp_configure 'Database Mail XPs', 1; 
   GO
   RECONFIGURE;
  GO
2.設定Database Mail, 可以使用SSMS->Management下的Database Mail以精靈的方式設定   MSSQLTip上有完整的說明及畫面   http://www.mssqltips.com/tip.asp?tip=1100,   如果要用SCRIPT新增,可以參考MSDN上的範例,我修改後如下
  -- Create a Database Mail account
  EXECUTE msdb.dbo.sysmail_add_account_sp
 @account_name = 'testAccount',
 @description = 'Mail account for test e-mail.',
 @email_address = 'test@mail.test.com',
 @replyto_address = null,
 @display_name = 'testMailer',
 @mailserver_name = 'mail.test.com' ;


 -- Create a Database Mail profile
 EXECUTE msdb.dbo.sysmail_add_profile_sp
 @profile_name = 'testProfile',
 @description = 'Profile used for test mail.' ;


 -- Add the account to the profile (一個profile可有多個account)
 EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
 @profile_name = 'testProfile',
 @account_name = 'testAccount',
 @sequence_number =1 ;


 -- Grant access to the profile to the DBMailUsers role
 EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
 @principal_name = 'public',
 @profile_name = 'testProfile',
 @is_default = 1 ;
 
3.在SQL Server Agent 按右鍵選properties, 進入後在Alert System 下 勾選 Enable mail profile,挑選步驟2所設定的profile  name
4.在SQL Server  Agent 下,找到Operators目錄,按右鍵New operator, 在Name給這個operator指定一個名稱,在E-mail name 輸要發送的對象E-mail, 如果有多個就用;隔開,例如test1@mail.com.tw;test2@mail.com.tw, 以此類推
當然, 你可在此建立多個不同用途的operator, 以方不同性質的job針對不同管理者進行通知

5.最後是....記得重新啟動SQL Server Agent  服務....大功告成

做個測試....
建一個job, 隨便做一個會出錯的step, 例如讀一個不存在的table, select 1 from xxx

在job的Notification中, 勾選E-mail, 選擇步驟4所建立的Operator, 然後指定When the job fails , 這樣當step 執行有錯誤時,就會啟動送email的機制了.

如果以上通通沒搞錯, 試跑一下job, 就收到錯誤email通知了

JOB RUN: 'test' was run on 2010/4/21 at 下午 10:05:16

DURATION: 0 hours, 0 minutes, 0 seconds
STATUS: Failed
MESSAGES: The job failed. The Job was invoked by User win2003\Administrator. The last step to run was step 1 (test).

缺點是....錯誤訊息太精簡了, 也許就只是通知(notification) .

google了一下, 看看這篇文章, 自已想辦法去讀取sysjobstepslogs的完整錯誤吧

以後再試

publish error allowDefinition='MachineToApplication'

一個老舊的aspx web form專案,調了一些功能建置成功,但進行部署時顯示以下錯誤。 在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的區段發生錯誤。錯誤的原因可能是虛擬目錄尚未在 IIS 中設定為...