2010年3月17日 星期三

route table ?

在人客家做工, 上網處處受限
有了iPhone, 路是人走出來的

想要指定IE上內網做事時要走人客家的路
出去外面花花世界逛逛時要走iPhone 3GS

同事指導教學..
首先, 先將原先內網中,人客家的GATEWAY移掉
接著, 利用ROUTE TABLE 指定哪些IP是要以內網要進出

在DOS COMMAND下, 加這麼一段指令
route add 172.1.0.0 mask 255.255.0.0 172.1.33.254
紅色是以172開頭的IP都走內網
綠色是範圍
藍色是目前所在環境的gateway, 如果有多個就要一一設置

如果不知所在GATEWAY, 先利用tracert去試看看,
例如, tracert http://www.facebook.com/,  然後就會一一將IP顯示出來....

用了幾天, 也不太確定OK不OK,因為時好時壞...
有什麼簡易方法可以讓IE和FIREFOX走不同的連線嗎?

2010年3月16日 星期二

判斷字串是否含造字

想要一個在TSQL直接可以用來判斷欄位中是否含有造字(本倫是採用司法院造字程式) 的字在里頭的功能

爬了一下文,沒找到有人寫好的, 不過倒是有很多教你如何判別是否為中文的方法

參考了一下這篇討論, 想自已寫一個CLR看看

先在CONSOLE試看看,

public static void test2(string content)
{
Encoding Encoding950 = Encoding.GetEncoding(950);
byte[] bytes = Encoding950.GetBytes(content);
byte[] bytes1 = new byte[1];
byte[] bytes2 = new byte[2];
byte hibyte;
byte lowbyte;


for (int i = 0; i < bytes.Length; i++)
{
hibyte = bytes[i];


if (hibyte <  128) //英文或unicode


{


bytes1[0] = hibyte;

Console.WriteLine("ascii" + hibyte.ToString());


Console.WriteLine(Encoding950.GetString(bytes1));


}


else


{


i++;


lowbyte = bytes[i];


bytes2[0] = hibyte;


bytes2[1] = lowbyte;


//Console.WriteLine("high: " + hibyte.ToString());


//Console.WriteLine("low : " + lowbyte.ToString());


//Console.WriteLine("high: " + Convert.ToString(hibyte, 16));


//Console.WriteLine("low : " + Convert.ToString(lowbyte, 16));


Console.WriteLine(Encoding950.GetString(bytes2));


string hex = Convert.ToString(hibyte, 16) + Convert.ToString(lowbyte, 16);


Console.WriteLine("hex: " + hex);


Console.WriteLine(hex.CompareTo("A140").ToString()); //-1為範圍外


Console.WriteLine("FEFE".CompareTo(hex).ToString()); //1為範圍外
}
}


Console.ReadLine();
}

不太確定這樣判斷high byte和low byte對不對

但試了幾個造字看來判斷都正確地...
最後延續之前寫的DLL ( sql server clr user defined functions), 再加一個function 部署到DB就大功告成了..

The current database compatibility level does not support managed objects

之前寫過sql server clr user defined functions
今天要部署到一台機器時, 一直出現以下的錯誤訊息.
The current database compatibility level does not support managed objects. 

參考Frank Wang's inspirations on .NET 的這篇文章後

先打開SSMS
在要部署的資料庫,按右鍵選內容property
在左方選option , 並改資料庫的compatibility  level為sql server 2005(90)後

再部署就OK了

2010年3月14日 星期日

MSDN的同步翻譯

今天上MSDN線上雜誌時發現是以中英文的方式同步呈現
在吸收新知外又可以練習英文
不過沒有人工修改過的中文,有看沒有懂.
機器人要加油.

很有意思的改版. 這也代表我很久沒上去了...

MSDN Magazine

2010年3月11日 星期四

SSRS 2005 部署後,換行失效了

人客問了一個問題, 以下是他的sql
select
(select cast(pk as varchar(10) ) + ':' + col1 + char(10) from tabTest b
where a.coKey = b.colKey for xml path('')) as newCol
from tabTest a
where a.pk < 20
他用這段sql找出了同一個colKey下所有的筆數, 並將每一筆的 col1 組成一個字串,以換行符號隔開
所以在report  designer 執行後就會跑出以下類似的結果
1:test1
2:test2
3:test3
4.test4

在設計的環境下,結果看來是ok,

但部署到report server後, 執行報表, 結果變成了
1:test1 2:test2 3:test3
4.test4

原本的換行效果不見了...

實測後,
在report designer 下, SSRS 2008 (sp1) 和SSRS 2005 (sp3) 跑出來的結果一切正常
但部署到report server 後, SSRS 2008 (sp1) 正常, 但SSRS 2005 (sp3) 就失效了...

看來是SSRS 2005的問題, render 時,不認得char(10)這個換行符號

於是,做點小手腳, 先將sql 改成如下,

select
(select cast(pk as varchar(10) ) + ':' + col1 + 'newLine' from tabTest b
where a.coKey = b.colKey for xml path('')) as newCol
from tabTest a
where a.pk < 20
然後在 rdl layout中, 將textbo 的expression設成

=replace( Fields!newCol.Value, "newLine",vbCRLF )
這樣在設計環境下預瀏覽ok
同時部署到report server 時,網頁上也能正常顯示換行了.

2010年3月10日 星期三

不支援關鍵字: 'provider'

想要在SSIS中呼叫自訂的DLL,其中需要動態傳入connection string,以方便在不同的環境中使用

於是在script task中,利用讀取dtsConfig中的connectionString,再傳遞給自訂的DLL method

執行時,在script task出現了一段錯誤

 System.ArgumentException: 不支援關鍵字: 'provider'。  
 於 System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable
 synonyms, Boolean firstKey)  
 於 System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules)  
 於 System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)   
 於 System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)   
 於 System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)   
 於 System.Data.SqlClient.SqlConnection.ConnectionString_Set(String value)  
 於 System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)  
 於 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Initialize(IDataServices dataServices, Object connection)   
 於 System.Data.Linq.DataContext.Init(Object connection, MappingSource mapping)   
 於 System.Data.Linq.DataContext..ctor(String fileOrServerOrConnection, MappingSource mapping)   
於是乎,將dtsConfig中connectionstring的provider移除, 接著又出現了以下的錯誤
"ConnectionString 中未指定 OLE DB 提供者。正確範例為 Provider=SQLOLEDB;。"

 於是乎,又將dtsConfig中connectionstring的Provider改成 Provider=SQLOLEDB

怎麼著..., 又出現剛剛的 不支援關鍵字: 'provider'。  的錯誤...

也過給多種不同的連線字串,也爬了很久很久的文, 攏無法度解決....

唉, 同樣的連線字串,在不同的地方使用, 有的OK, 有的出搥... 

最後, 試了半天,只好先在自訂的DLL,把接收過來的連線字串中,其中Provider的關鍵字後的字串全移除掉

所以原本傳入
Data Source=ttt;User ID=sa;Password=1234;Initial Catalog=test;Provider=SQLNCLI.1;Persist Security Info=True;

取代後就變成
 Data Source=ttt;User ID=sa;Password=1234;Initial Catalog=test;

然後,我的SSIS就可以正常執行了.

方法不好,只能解燃眉之急, 還得要Provider=SQLNCLI.1;Persist Security Info=True;這段寫在最後面才行




後記.....

同事在問, 你很奇怪耶, 既然要移掉Provider, 那何不在傳入時就不要給不就行了??


我也很想啊, 就是不行啊,一直出現
 "ConnectionString 中未指定 OLE DB 提供者。正確範例為 Provider=SQLOLEDB;。"
到底connectionString 要怎麼給呢?

SQL Agent 執行 SSIS Package

先建立一個 Credential
1.先新增一個本機的使用者帳號,例如ssisRunner
2.在sql server management studio下, 展開Security,Credential按右鍵,New Credential,在Identity輸入步驟1建立的使用者帳號

再建立一個Proxies
1.在sql server management studio下,展開SQL Server Agent 下的Proxies,在SSIS Package Execution按右鍵New Proxy,新建一個Proxy
2.在Active to the following  subsystems下,勾選 SQL Server Integration Package

新增job
1.在sql server management studio下,SQL Server Agent Job新增一個工作,
1.在step 中,Type選SQL Server Integration Services Package,
2.Run as指定為前述建立的ssisRunner
3.在General頁籤,Package Source 選擇File System, 然後輸入Package 所在的位址

完成後, 這樣就可以透過SQL Agent來執行package囉

2010年3月2日 星期二

C1StudioEnterpriseMSVS key

維護一個好久好久的專案,
用到一個免費版本的元件 Microsoft(R) Visual Basic(R) .NET Resource Kit CD and the ComponentOne Studio Enterprise for Microsoft Visual Studio(R) .NET Product

.net 1.1年代的東西...找了好久,才找到所需要的LICENSE....哭.

SE302M1-CF-144817

獻給有需要的人...應該沒有人還會需要那麼舊的東西吧...

但....


publish error allowDefinition='MachineToApplication'

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