2010年7月19日 星期一

時間轉換

CDate(lblCdate.Text).ToString("dd-MMM-yyyy", System.Globalization.CultureInfo.InvariantCulture)



我們經常會遇到對時間進行轉換,達到不同的顯示效果,默認格式為:2006-6-6 14:33:34
如果要換成成200606,06-2006,2006-6-6或更多的格式該怎麼辦呢?
這裡將要用到:DateTime.ToString的方法(String, IFormatProvider)
示例:
using System;
using System.Globalization;
String format="D";
DateTime date=DataTime.Now;
Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo));
結果輸出
Thursday, June 16, 2006

在這裡列出了參數format格式詳細用法
=======================
格式字符 關聯屬性/說明
d ShortDatePattern
D LongDatePattern
f 完整日期和時間(長日期和短時間)
F FullDateTimePattern(長日期和長時間)
g 常規(短日期和短時間)
G 常規(短日期和長時間)
m、M MonthDayPattern
r、R RFC1123Pattern
s 使用當地時間的 SortableDateTimePattern(基於 ISO 8601)
t ShortTimePattern
T LongTimePattern
u UniversalSortableDateTimePattern 用於顯示通用時間的格式
U 使用通用時間的完整日期和時間(長日期和長時間)
y、Y YearMonthPattern

下表列出了可被合併以構造自定義模式的模式
========================================
這些模式是區分大小寫的;例如,識別「MM」,但不識別「mm」。如果自定義模式包含空白字符或用單引號括起來的字符,則輸出字符串頁也將包含這些字符。未定義為格式模式的一部分或未定義為格式字符的字符按其原義複製。

格式模式 說明 :
d 月中的某一天。一位數的日期沒有前導零。
dd 月中的某一天。一位數的日期有一個前導零。
ddd 周中某天的縮寫名稱,在 AbbreviatedDayNames 中定義。
dddd 周中某天的完整名稱,在 DayNames 中定義。
M 月份數字。一位數的月份沒有前導零。
MM 月份數字。一位數的月份有一個前導零。
MMM 月份的縮寫名稱,在 AbbreviatedMonthNames 中定義。
MMMM 月份的完整名稱,在 MonthNames 中定義。
y 不包含紀元的年份。如果不包含紀元的年份小於 10,則顯示不具有前導零的年份。
yy 不包含紀元的年份。如果不包含紀元的年份小於 10,則顯示具有前導零的年份。
yyyy 包括紀元的四位數的年份。
gg 時期或紀元。如果要設置格式的日期不具有關聯的時期或紀元字符串,則忽略該模式。
h 12 小時制的小時。一位數的小時數沒有前導零。
hh 12 小時制的小時。一位數的小時數有前導零。
H 24 小時制的小時。一位數的小時數沒有前導零。
HH 24 小時制的小時。一位數的小時數有前導零。
m 分鐘。一位數的分鐘數沒有前導零。
mm 分鐘。一位數的分鐘數有一個前導零。
s 秒。一位數的秒數沒有前導零。
ss 秒。一位數的秒數有一個前導零。
f 秒的小數精度為一位。其餘數字被截斷。
ff 秒的小數精度為兩位。其餘數字被截斷。
fff 秒的小數精度為三位。其餘數字被截斷。
ffff 秒的小數精度為四位。其餘數字被截斷。
fffff 秒的小數精度為五位。其餘數字被截斷。
ffffff 秒的小數精度為六位。其餘數字被截斷。
fffffff 秒的小數精度為七位。其餘數字被截斷。
t 在 AMDesignator 或 PMDesignator 中定義的 AM/PM 指示項的第一個字符(如果存在)。
tt 在 AMDesignator 或 PMDesignator 中定義的 AM/PM 指示項(如果存在)。
z 時區偏移量(「+」或「-」後面僅跟小時)。一位數的小時數沒有前導零。例如,太平洋標準時間是「-8」。
zz 時區偏移量(「+」或「-」後面僅跟小時)。一位數的小時數有前導零。例如,太平洋標準時間是「-08」。
zzz 完整時區偏移量(「+」或「-」後面跟有小時和分鐘)。一位數的小時數和分鐘數有前導零。例如,太平洋標準時間是「-08:00」。
: 在 TimeSeparator 中定義的默認時間分隔符。
/ 在 DateSeparator 中定義的默認日期分隔符。
% c 其中 c 是格式模式(如果單獨使用)。如果格式模式與原義字符或其他格式模式合併,則可以省略「%」字符。
\ c 其中 c 是任意字符。照原義顯示字符。若要顯示反斜槓字符,請使用「\\」。

只有上面第二個表中列出的格式模式才能用於創建自定義模式;在第一個表中列出的標準格式字符不能用於創建自定義模式。自定義模式的長度至少為兩個字符;例如,

DateTime.ToString( "d") 返回 DateTime 值;「d」是標準短日期模式。
DateTime.ToString( "%d") 返回月中的某天;「%d」是自定義模式。
DateTime.ToString( "d ") 返回後面跟有一個空白字符的月中的某天;「d」是自定義模式。

比較方便的是,上面的參數可以隨意組合,並且不會出錯,多試試,肯定會找到你要的時間格式
如要得到2005年06月 這樣格式的時間
可以這樣寫:
date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)
或者
date.ToString("yyyy年MM月")
如此類推.

下面列出一些Asp.net中具體的日期格式化用法:
============================================
1.綁定時格式化日期方法:




2.數據控件如DataGrid/DataList等的件格式化日期方法:
e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString();

3.用String類轉換日期顯示格式:
String.Format( "yyyy-MM-dd ",yourDateTime);

4.用Convert方法轉換日期顯示格式:
Convert.ToDateTime("2005-8-23").ToString

("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁體數據庫

5.直接用ToString方法轉換日期顯示格式:
DateTime.Now.ToString("yyyyMMddhhmmss");
DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")

6.只顯示年月
DataBinder.Eval(Container.DataItem,"starttime","{0:yyyy-M}")

7.顯示時間所有部分,包括:年月日時分秒
DataFormatString="{0:yyyy-MM-dd HH24:mm:ss}">

何謂 應用程式 組態設定 Application Configurable

原出處
非常詳細唷
另外:其他net文章也很多喔,值得去造訪參考一下唷!

修復及壓縮 ACCESS 的 MDB

原出處
修復及壓縮 ACCESS 的 MDB

3 種方式 :

方法 1:

使用 DAO 物件 ( Data Access Object )

設定引用項目 Microsoft DAO x.x Object Library

目前 DAO 物件有 3.51 版的 Microsoft DAO 3.5 Object Library ( For Access 97 以前的 MDB )
及 3.6 版 Microsoft DAO 3.6 Object Library ( For Access 2K 以後的 MDB )

不設定引用 ( Early Binding ) 也可使用 Late Binding 方式來建立 DAO 3.5 或 3.6 版本的 DBEngine
Set dbe = CreateObject("DAO.DBEngine.35") ' 或 Set dbe = CreateObject("DAO.DBEngine.36")

Compact 壓縮 ( Defragmentation ) 資料庫 動作如下 :

語法 :

DBEngine.CompactDatabase OldDb, NewDb, Locale, Options, Password

OldDb : 欲處理之來源 MDB

NewDb : 為處理後之目的 MDB

Locale 參數 :
dbLangGeneral : English, German, French, Portuguese, Italian, and Modern Spanish
dbLangChineseSimplified : Simplified Chinese ( 繁體中文 )
dbLangChineseTraditional : Traditional Chinese ( 簡體中文 )

Options 參數 :
dbVersion10 : M$ Jet db engine ver 1.0 file format while compacting.
dbVersion11 : M$ Jet db engine ver 1.1 file format while compacting.
dbVersion20 : M$ Jet db engine ver 2.0 file format while compacting.
dbVersion30 : M$ Jet db engine ver 3.0 file format (compatible with ver 3.5) while compacting.

dbEncrypt : Encrypt the database while compacting.
dbDecrypt : Decrypt the database while compacting

PS : Jet ( Joint Engine Technology )

Sample :

DBEngine.CompactDatabase "C:\Src.mdb", "C:\Dst.mdb", _
dbLangChineseTraditional, dbVersion40 + dbEncrypt

PS : dbVersion40 請調整成適當的版本

By the way , DAO 3.5 有提供 MDB 修復 ( Repair ) 的方法 :
DBEngine.RepairDatabase "MDB 路徑 + 檔名"

PS : 3.5 以後之版本已無此方法 ( 已併入 CompactDatabase )




================================================================



方法 2:

使用 JRO 物件

設定引用項目 Microsoft Jet and Replication Objects X.X library

語法 :

JetEngine.CompactDatabase(SourceConnection, DestConnection)

參數 :

SourceConnection : String 值,指定與欲壓縮之來源資料庫的連接。
若 SourceConnection 指定的資料庫已經開啟,就會發生錯誤。

DestConnection : String 值,指定與壓縮後才建立之目的地資料庫的連接。
若 DestConnection 指定的資料庫已經存在或已經有相同名稱的其它檔案存在,就會發生錯誤。

Connection String :


屬性
說明

Provider

指示提供者的名稱,用來連接到資料來源。
若未指定此屬性,會採用 Microsoft.Jet.OLEDB.4.0 提供者。
若來源字串的提供者名稱和目的地字串的提供者名稱不同,就會發生錯誤。

Data Source
指示資料庫的名稱。
來源和目的地連接資訊都需要此屬性。

User Id
若來源資料庫設有安全保護時,指示使用者的名稱。

Password
若來源資料庫設有安全保護時,指示使用者的密碼。

Locale Identifier
指示新資料庫的國別 id。
若省略此 id,則目的地資料庫的國別 id 會和來源資料庫相同。
國別指定資料庫字串比較的排列順序。

Jet OLEDB:Database Password
若資料庫設有密保護,指示密碼

Jet OLEDB:Engine Type

指示要開啟或將建立的來源資料庫版本。
您可以使用的 OLE DB 引擎類型為:
1 for JET Version 1.0
2 for JET Version 1.1
3 for JET Version 2.x
4 for JET Version 3.x
5 for JET Version 4.x
若省略目的地資料庫的此資訊,它會預設成 5。
目的地資料庫的值不可以是比來源資料庫的版本還新。

Jet OLEDB:Registry Path
設定 Windows Registry 機碼的資訊,包括 Microsoft Jet Database Engine 的值。

Jet OLEDB:System Database
指示系統資料庫的位置。

Jet OLEDB:Encrypt Database
指示是否加密新的資料庫。若此省略此參數,則新的資料庫會和來源資料庫擁有相同的加密。

Jet OLEDB:Don't Copy Locale on Compact
指示資料庫要使用的排列順序,取代任何每個資料行國別設定。(Boolean.)

Jet OLEDB:Compact Without Relationships
指示是否複製關係至新的資料庫。 (Boolean.)

Jet OLEDB:Compact Without Replica Repair
指示是否試著尋找其它抄本來修復受損複寫式資料庫。(Boolean.)



Sample:

Dim jro As New jro.JetEngine

jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 來源MDB", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 目的MDB;Jet OLEDB:Engine Type= 4"




================================================================



方法 3:


如果機器上有裝 M$ Access , 也可直接使用 Access 來 Repair / Compact MDB資料庫


或寫程式來呼叫 Access來做


建立 Access 應用程式物件

設定引用項目 Microsoft Access X.X Object Library

Dim objAcc As New Access.Application



Dim objAcc As Object

Set objAcc = CreateObject("Access.Application")

之後

Call objAcc.CompactRepair("c:\A.mdb", "C:\B.mdb", False)

即可

VB.Net 透過 JRO 修復 Access MDB

原出處
VB.Net 透過 JRO Compact / Repair Access MDB


Imports System

Imports System.IO


Public Class Form1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

' 將C:\db1.mdb 做Compact / Repair

If Compact_MDB("C:\db1.mdb") Then MessageBox.Show("OK !")

End Sub


Private Function Compact_MDB(ByVal strFile As String) As Boolean


' Jet Access (MDB) 連線字串; Jet ( Joint Engine Technology )

Dim strCn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}"


' 或"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5"


' Path.GetTempFileName 方法: 在磁碟上建立具命之零位元組的唯一暫存檔案,

' 然後傳回該檔案的完整路徑。

Dim strTmpFile As String = Path.GetTempFileName.Replace(".tmp", ".mdb") ' 把tmp 副檔名改成mdb


' 建立物件陣列存放引數(參數) , 來源, 目的

Dim objPara As Object() = New Object() {String.Format(strCn, strFile), String.Format(strCn, strTmpFile)}


' Activator 成員: 包含本機或遠端建立物件型別的方法,或者取得對現有遠端物件的參考。

' Activator.CreateInstance 方法(Type) : 使用最符合指定參數的建構函式,建立指定型別的執行個體。

Dim objJRO As Object = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"))

' Type.GetTypeFromProgID 方法: 取得與指定的程式識別項(ProgID) 關聯的型別;

' 如果在載入Type 時發生錯誤,則傳回null。

' JRO.JetEngine 為Microsoft Jet and Replication Objects X.X library


' Type.InvokeMember 方法

' Type.InvokeMember (String, BindingFlags, Binder, Object, Object[])

objJRO.GetType.InvokeMember("CompactDatabase", Reflection.BindingFlags.InvokeMethod, _

Nothing, objJRO, objPara)


' 使用指定的繫結條件約束並符合指定的引數清單,來叫用指定的成員。

' BindingFlags 列舉型別,InvokeMethod 指定要叫用方法。


File.Delete(strFile) ' File.Delete 方法: 刪除Compact 前之mdb 檔

File.Move(strTmpFile, strFile) ' File.Move 方法: 將Compact 過的mdb 檔改成(回)正確檔名


' Marshal.ReleaseComObject 方法釋放JRO COM 物件

Runtime.InteropServices.Marshal.ReleaseComObject(objJRO)

objJRO = Nothing


Return True


End Function


End Class

全域鍵盤欄截 Keyboard Hook (Block Key)

原出處
Imports System.Runtime.InteropServices

Public Class Form1

Private Sub Form1_Load(ByVal s As Object, ByVal e As EventArgs) Handles MyBase.Load
KbHook.BlockKey = Keys.F1 ' 阻斷 F1 按鈕
KbHook.StartHook() ' 開始 Hook
End Sub

Private Sub Form1_FormClosing(ByVal s As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
KbHook.StopHook() ' 停止 Hook
End Sub

End Class

Public Class KbHook ' Keyboard Hook Class

' 宣告 API
Private Delegate Function HookProc _
(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr

Private Declare Auto Function SetWindowsHookEx Lib "user32.dll" _
(ByVal idHook As Integer, ByVal lpfn As HookProc, _
ByVal hMod As IntPtr, ByVal dwThreadId As Integer) As IntPtr

Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hhk As IntPtr) As Boolean

Private Declare Function CallNextHookEx Lib "user32.dll" _
(ByVal hhk As IntPtr, ByVal nCode As Integer, _
ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr

Shared hk As IntPtr
Public Shared BlockKey As Keys = 0

Public Shared Function KbProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
If Marshal.ReadInt32(lParam) = BlockKey Then Return True
Return CallNextHookEx(hk, nCode, wParam, lParam)
End Function

Public Shared Sub StartHook()
hk = SetWindowsHookEx(13, AddressOf KbProc, Marshal.GetHINSTANCE(GetType(KbHook).Module), 0)
End Sub

Public Shared Sub StopHook()
UnhookWindowsHookEx(hk)
End Sub

End Class

OpenFileDialog 時檢視縮圖

原出處
Public Class Form1

' 宣告 API

Private Declare Function GetActiveWindow Lib "user32" () As Int32

Private Declare Function FindWindowExA Lib "user32" _
(ByVal hWnd1 As Int32, ByVal hWnd2 As Int32, _
ByVal lpsz1 As String, ByVal lpsz2 As String) As Int32

Private Declare Function SendMessageA Lib "user32" _
(ByVal hwnd As Int32, ByVal wMsg As Int32, _
ByVal wParam As Int32, ByVal lParam As Int32) As Int32

Private WithEvents tmr As Timer ' 宣告 Timer

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Using ofd As New OpenFileDialog
ofd.InitialDirectory = "D:\Photo\Gif"
tmr = New Timer With {.Interval = 99} ' 建購物件並初始化
If chkThumbnail.Checked Then tmr.Start() ' 勾選檢視縮圖則啟動 Timer
ofd.ShowDialog()
End Using
End Sub

' Timer 事件
Private Sub tmr_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tmr.Tick
' 取得 Dialog 視窗 handle
Dim hwnd As Int32 = FindWindowExA(GetActiveWindow, 0, "SHELLDLL_DefView", vbNullString)
If hwnd > 0 Then
SendMessageA(hwnd, &H111, 28717, 0) ' 傳訊息 VIEW_THUMBNAIL
tmr.Stop() ' 停止 Timer
End If
End Sub
End Class

VB.Net 如何存取 xBase / FoxPro 資料庫

原出處
VB.Net 如何存取 xBase / FoxPro 資料庫


<< 使用OleDb >>


Imports System.Data.OleDb


Dim strCn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=C:\DBF檔案所在資料夾;" & _

"Extended Properties=dBASE IV;" & _

"User ID=Admin;Password=;"


Dim strQry As String = "Select * From 某某.dbf"


Dim cn As New OleDbConnection(strCn)

Dim da As New OleDbDataAdapter(strQry, cn)

Dim ds As New DataSet


da.Fill(ds)

DataGridView1.DataSource = ds.Tables(0)


PS : ConnectionString 的 Extended Properties 可為 dBASE IV 或 dBASE 5.0 或 dBASE III。

也可以是 FoxPro 2.0 、 FoxPro 2.5 、 FoxPro 2.6 、 FoxPro 3.0



' ================================================================



<< 使用ODBC >>


Imports System.Data.Odbc


Dim strCn As String = "DRIVER={Microsoft dBase Driver (*.dbf)};dbq=C:\DBF檔案所在資料夾"


Dim strQry As String = "Select * From 某某.DBF"


Dim cn As New OdbcConnection(strCn)

Dim da As New OdbcDataAdapter(strQry, cn)

Dim ds As New DataSet


da.Fill(ds)

DataGridView1.DataSource = ds.Tables(0)


PS : ConnectionString 的 Driver 可為 [ODBC 資料來源管理員] 中所提供的 驅動程式。


如:

"DRIVER={Microsoft dBase Driver (*.dbf)};dbq=C:\DBF檔案所在資料夾"

"DRIVER={Microsoft dBase VFP Driver (*.dbf)};dbq=C:\DBF檔案所在資料夾"

"DRIVER={Microsoft FoxPro Driver (*.dbf)};dbq=C:\DBF檔案所在資料夾"

"DRIVER={Microsoft FoxPro VFP Driver (*.dbf)};dbq=C:\DBF檔案所在資料夾"

"DRIVER={Microsoft Visual FoxPro Driver (*.dbf)};dbq=C:\DBF檔案所在資料夾"


xBase 或 FoxPro 資料庫,只要有 ODBC Driver,皆可使用相同方式來連線存取。

get app.config data with configurationmanager.appsettings

右邊的選單的加入參考System.Configuration
不是using System.Configuration;

在程式內才能使用,不會報錯

configurationmanager.appsettings

string DNS = ConfigurationSettings.AppSettings.Get("DNS");

string DNS = ConfigurationManager.AppSettings["DNS"];

string DNS = Config.DNS;