google-code-prettify

星期五, 4月 22, 2011

List、Array 轉String

宣告一個 List 變數 ArrList
Dim ArrList As New List(Of String)


用 ArrList.Add() 函數可把資料加入 List 中
ArrList.Add("a")
ArrList.Add("b")

'轉陣列
1. 將 ArrList 轉成 String() 陣列
Dim ArrString As String() 
ArrString = ArrList.ToArray
2. 將 ArrList 轉成 String 陣列
Dim ArrString() As String 
ArrString = ArrList.ToArray

'將 List 轉成 String 分隔符號用逗點分隔
'String.Join(",", ArrList.ToArray)

轉成 String ,內容為 "a,b"
方法1. 直接將 ArrList 轉成字串
Dim sstr As String = String.Join(",", ArrList.ToArray)
方法2 將 arrstring 陣列轉成字串
Dim sstr As String = String.Join(",", arrstring)

使用函數
ToArray()
 String.Join()

使用宣告變數
List(of String)
String()
String

星期四, 4月 21, 2011

【ASP.NET】利用 Sqldatasource 抓出 Gridview 的 SelectedDataKey

當 Gridview 設定了多個 DataKey 時
Sqldatasource 要如何取得 Selected DataKeys 中的某一個 DataKey
主要是用 ControlParameter 然後定義 PropertyNameSelectedDataKey 加上維度即可做到

<asp:ControlParameter ControlID="GridView1" Name="ServiceID" PropertyName="SelectedDataKey[0]" />




---------------------------------------------------------------------------------------------------------------------------
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
SelectCommand="SELECT A,B,C FROM Table WHERE A = @A And B=@B">
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="A" PropertyName="SelectedDataKey[0]" />
<asp:ControlParameter ControlID="GridView1" Name="B" PropertyName="SelectedDataKey[1]" />
</SelectParameters>
</asp:SqlDataSource>
----------------------------------------------------------------------------------------------------------------------------

星期五, 4月 15, 2011

【Oracle】Oracle characterset US7ASCII 亂碼求生之道

環境說明:
Oracle NLS_LANG 為 "TRADITIONAL CHINESE_TAIWAN.US7ASCII"
( 之前的開發人員把DB設成 US7ASCII,Client 設成 ZHT16MSWIN950,)


Oracle的 server characterset 為 US7ASCII 時 存到 DB 中的 中文字
是以BIG5 編碼 被存入 到VARCHAR欄位中

當 DotNET 從 DB取出後,卻變成亂碼
檢查編碼 : select columns, UTL_RAW.cast_to_raw(columns) from table

columns UTL_RAW.cast_to_raw(columns)
--------------------------------------------------------------------------------------
成功路200號 A6A8A55CB8F4A2B1A2AFA2AFB8B9

利用中文編碼解析工具 1.32 來解析
UTL_RAW.cast_to_raw(columns) 轉出來的編碼是 BIG5

好吧~進入主題 開始亂搞吧
select UTL_RAW.cast_to_nvarchar2(UTL_RAW.CONVERT(UTL_RAW.cast_to_raw(columns),'TRADITIONAL CHINESE_TAIWAN.AL16UTF16','TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950')) as DD from table
把資料庫中的編碼當成 TRADITIONAL.CHINESE_TAIWAN.ZHT16MSWIN950
然後把它(這畜牲)轉成 TRADITIONALCHINESE_TAIWAN.AL16UTF16

好了從SQLPLUS查出來是 ??????? 看來很正常

Dim DS As DataSet, DS1 As DataSet
Dim sss As String = "select UTL_RAW.cast_to_nvarchar2(UTL_RAW.CONVERT(UTL_RAW.cast_to_raw(columns),'TRADITIONALCHINESE_TAIWAN.AL16UTF16','TRADITIONAL.CHINESE_TAIWAN.ZHT16MSWIN950')) as DD from table"

DS1 = CreateDataset(sss, "aa")  'CreateDataset 函數自己寫的
Dim DD As String = DS1.Tables(0).Rows(0).Item(0)
Dim bb() As Byte
bb = Encoding.Unicode.GetBytes(DS1.Tables(0).Rows(0).Item(0))

Response.Write(DD + " " + BitConverter.ToString(bb) + "
")

從網頁上查出來果然正常了
成功路200號 10-62-9F-52-EF-8D-12-FF-10-FF-10-FF-5F-86

利用中文編碼解析工具 1.32 來解析 10-62-9F-52-EF-8D-12-FF-10-FF-10-FF-5F-86 為 UTF16編碼

使用函數:
1. UTL_RAW.cast_to_nvarchar2
2. UTL_RAW.CONVERT
3. UTL_RAW.cast_to_raw

PS:不知道其他適不適用...

參考Link:
Oracle UTL_RAW
Oracle UTL_RAW Package
.Convert string to and back: UTF8,UTF7,Unicode and UTF32
KB-Oracle 9i NVarchar求生守則 (黑暗執行緒)