首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 轉 VB.NET 開發實務筆記:Oracle 參數、DataSource 綁定與大小寫敏感

     編輯:關於C語言

背景

專案需將既有 C# WinForms 程式碼遷移至 VB.NET,過程中遇到三個典型語法與行為差異,記錄備查。

問題一:OracleNumber 轉 Integer 型別轉換失敗

C# 原始碼

// C# - 正常運作
OracleCommand cmd = new OracleCommand("select count(*) from codeuser", con);
int count = (int)cmd.ExecuteScalar(); // 隱含轉換 object -> int

VB.NET 遷移後報錯

' VB.NET - 編譯錯誤: Option Strict On 禁止縮小轉換
Dim cmd As New OracleCommand("select count(*) from codeuser", con)
Dim a As Integer = cmd.ExecuteOracleScalar() ' 回傳 OracleNumber
' 錯誤: 從類型 OracleNumber 到 Integer 的轉換無效

解決方案

' 方案 1: 使用 ExecuteScalar 回傳 object,再轉型 (需 Option Strict Off 或明確轉換)
Dim a As Integer = CInt(cmd.ExecuteScalar())

' 方案 2: 明確轉換 OracleNumber (需引用 Oracle.DataAccess.Types)
Dim oracleNum As OracleNumber = cmd.ExecuteOracleScalar()
Dim a As Integer = oracleNum.ToInt32()

' 方案 3: 直接用 Convert (最通用)
Dim a As Integer = Convert.ToInt32(cmd.ExecuteScalar())

核心差異

  • C# ExecuteScalar() 回傳 object,執行期由使用者轉型。
  • VB.NET ExecuteOracleScalar() 回傳強型別 OracleNumber,Option Strict On (預設) 禁止隱含縮小轉換。

問題二:ComboBox DataSource 綁定欄位名稱大小寫敏感

現象

' VB.NET
ComboBox1.DataSource = ds.Tables("codeuser").DefaultView
ComboBox1.DisplayMember = "COLUMN_NAME" ' 必須與資料庫欄位大小寫完全一致 (Oracle 預設大寫)

Oracle 未加雙引號的識別元預設儲存為大寫。DataTable 欄位名稱繼承此特性,VB.NET DisplayMember 比對區分大小寫,C# 則不區分 (視資料提供者而定)。

最佳實踐

' 1. 統一轉大寫 (Oracle 慣例)
ComboBox1.DisplayMember = "COLUMN_NAME".ToUpper()

' 2. 或在 SQL 中使用別名控制大小寫
"select column_name as ColumnName from codeuser"
ComboBox1.DisplayMember = "ColumnName"

問題三:C# 與 VB.NET 關鍵字對照速查

C#VB.NET備註
usingImports命名空間匯入
namespaceNamespace
classClass
staticShared靜態/共用成員
readonlyReadOnly
constConst
propertyPropertyVB 需 Get/Set 區塊
eventEventVB 需 AddHandler/RemoveHandler 或 RaiseEvent
delegateDelegate
lockSyncLock
using (IDisposable)Using ... End Using資源釋放區塊
nullNothing
thisMe
baseMyBase

遷移工具建議

  • Telerik Code Converter (線上免費,支援專案級轉換)
  • SharpDevelop 內建轉換器 (開源 IDE)
  • Visual Studio:無內建專案級轉換,需第三方擴充套件

總結

  1. Option Strict On 是 VB.NET 遷移最大攔路虎,強制明確型別轉換,提升程式碼健壯性。
  2. Oracle 等資料庫欄位名稱大小寫特性,需在資料綁定層統一處理。
  3. 語法對照表僅是起點,語意差異 (如事件處理、屬性寫法) 才是遷移核心工作量。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved