2025年5月14日 星期三

TRY CATCH

 在較早的 SQL 版本,要檢測 TSQL 是否有發生執行錯誤,都只能透過判斷 @@ERROR 全域變數,直到 SQL2005 才新增了 TRY...CATCH 這個結構化的例外處理功能。 它採用和程式語言中的 TRY...CATCH 類似的語法,在 TRY 區塊內放的是一般陳述式,CATCH 區塊內放的是錯誤處理的陳述式。


使用 TRY...CATCH 結構,若執行的 TSQL 發生了錯誤,錯誤訊息將不會傳到呼叫端,除非透過 RAISERROR 再送出錯誤訊息。


取得錯誤訊息的函式:

當使用 TRY...CATCH 時,你可以在 CATCH 區塊中使用以下函式以取得與錯誤訊息相關的資訊:


ERROR_NUMBER :發生錯誤的錯誤代碼

ERROR_MESSAGE :發生錯誤的錯誤訊息

ERROR_SEVERITY :發生錯誤的錯誤層級

ERROR_STATE :發生錯誤的錯誤狀態

ERROR_PROCEDURE :發生錯誤的程序名稱

ERROR_LINE :發生錯誤的行數

BEGIN TRY

INSERT Emp(EmpName, DepNo) Values (@EmpName, 1) 

INSERT Emp(EmpName, DepNo) Values (@EmpName, 1) 

END TRY

BEGIN CATCH

    PRINT '錯誤代碼:' + cast(ERROR_NUMBER() as varchar(5)) + char(13) +

  '錯誤訊息:' + ERROR_MESSAGE()

    RAISERROR('資料寫入錯誤',16,10)

END CATCH; 

以上函式,若不是在 CATCH 區塊中使用,都將回傳 NULL 。


2025年5月6日 星期二

DriveInfo.GetDrives 取所有磁碟

 參考引用:DriveInfo.GetDrives Method

---


Imports System.IO

Imports System


Class Test

Public Shared Sub Main()

Dim allDrives As DriveInfo() = DriveInfo.GetDrives()


For Each d As DriveInfo In allDrives

Console.WriteLine("Drive {0}", d.Name)

Console.WriteLine("  Drive type: {0}", d.DriveType)

If d.IsReady Then

Console.WriteLine("  Volume label: {0}", d.VolumeLabel)

Console.WriteLine("  File system: {0}", d.DriveFormat)

Console.WriteLine("  Available space to current user:{0, 15} bytes", d.AvailableFreeSpace)


Console.WriteLine("  Total available space:          {0, 15} bytes", d.TotalFreeSpace)


Console.WriteLine("  Total size of drive:            {0, 15} bytes ", d.TotalSize)

End If

Next

End Sub

End Class