在使用OracleParameters時,CommandText 中的參數要以":"開頭,不能包含@等特殊字符。而在其它地方引用到此參數時可以不必加上":",程序會自動為其加上":"
OracleCommand oracmd = oracon.CreateCommand();
oracmd.CommandText = "select gas_user_no,vol_page,user_name,user_address,unit from gas_meter where gas_user_no = :gas_userno";
if (!oracmd.Parameters.Contains("gas_userno"))
{
oracmd.Parameters.Add(new OracleParameter("gas_userno", OracleDbType.Varchar2, ParameterDirection.Input));
}
oracmd.Parameters["gas_userno"].Value = “666666”
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = oracmd;
DataTable dt = new DataTable();
da.Fill(dt);
OracleDataReader dr = oracmd.ExecuteReader();
以下為轉載內容:
當 CommandType 屬性設置為StoredProcedure 時,CommandText 屬性應設置為存儲過程的名稱。如果存儲過程名稱包含任何特殊字符,則可能會要求用戶使用轉義符語法。當調用 Execute 方法之一時,該命令將執行此存儲過程。
用於 Oracle 的 .NET Framework 數據提供程序在向由CommandType.Text 的OracleCommand 調用的 SQL 語句傳遞參數時不支持問號 (?) 占位符。在這種情況下,必須使用命名的參數。例如:
下面的示例創建一個 OracleCommand 並顯示其參數。要完成此任務,請向該方法傳遞一個OracleConnection、一個查詢字符串(它是 SQL SELECT 語句)和一個OracleParameter 對象數組。
public void CreateOracleCommand(OracleConnection connection, string queryString, OracleParameter[] myParamArray) { OracleCommand command = new OracleCommand(queryString, connection); command.CommandText = "SELECT * FROM Emp WHERE Job = :pJob AND Sal = :pSal"; for (int j = 0; j < myParamArray.Length; j++) command.Parameters.Add(myParamArray[j]); string message = ""; for (int i = 0; i < command.Parameters.Count; i++) message += command.Parameters[i].ToString() + "\n"; Console.WriteLine(message); using (OracleDataReader row = command.ExecuteReader()) { while(row.Read()) { Console.WriteLine(row.GetValue(0)); } } }