私はC#コードビハインドの一部をSQL Serverの代わりにOracleと連携させるように変換することになっています。そしてオラクルとの私の経験は...オハイオ... 2日間です。OracleでのDataReaderの適切な使用?
だから、ここで私が持っているものです。
private void LoadPreferences()
{ // inital load of users function and role based on last action performed in database
try
{
OracleConnection oConn = GetConnection();
//string selectSQL = "select Function_ID,Role_ID from vw_mos_DPL_Last_Selection where Lan_ID = '" + strUserID + "'";
//string selectSQL = "select Function_ID,Role_ID from vw_mos_DPL_Last_Selection where Lan_ID = @strUserID";
//string selectSQL = "SELECT WORK_ID, ROLE_ID, ACTIVITY_ID, LAN_ID, CREATE_TS FROM THN_DPL_DETAIL WHERE Lan_ID = @strUserID ORDER BY CREATE_TS DESC";
string selectSQL = "SELECT * FROM(";
selectSQL = selectSQL + "SELECT TB.BUS_ID, TL.LOB_ID, TD.ROLE_ID, TL.LOB_ID, TD.ACTIVITY_ID, TD.LAN_ID, TD.CREATE_TS ";
selectSQL = selectSQL + "FROM THN_DPL_DETAIL TD ";
selectSQL = selectSQL + "LEFT JOIN THN_ACTIVITY TA ON TD.Activity_ID = TA.Activity_ID ";
selectSQL = selectSQL + "LEFT JOIN THN_ROLE TR ON TR.ROLE_ID = TA.Role_ID ";
selectSQL = selectSQL + "LEFT JOIN THN_LOB TL On TL.LOB_ID = TA.LOB_ID ";
selectSQL = selectSQL + "LEFT JOIN THN_BUSINESS TB ON TB.BUS_ID = TR.BUS_ID ";
selectSQL = selectSQL + "WHERE Lan_ID = @strUserID ";
selectSQL = selectSQL + "ORDER BY CREATE_TS DESC";
selectSQL = selectSQL + ") WHERE ROWNUM = 1;";
OracleCommand cmd = new OracleCommand(@selectSQL, oConn);
cmd.Parameters.AddWithValue("@strUserID", strUserID);
OracleDataReader reader;
oConn.Open();
reader = cmd.ExecuteReader();
//read first line
reader.Read();
if (reader.HasRows == true)
{
//First, grab the bytes from the reader: AA = Bus_ID, BB = LOB_ID and CC = Role_ID
byte AA = reader.GetByte(0);
byte BB = reader.GetByte(1);
byte CC = reader.GetByte(2);
//Now set the SelectedValue of Business and re-query the LOB dropdown for eligible values
CallBus_DrpDwnLst.SelectedValue = AA.ToString();
LOBLoad();
//Now set the SelectedValue of LOB since it's filled with eligible valuse
CallLOB_DrpDwnLst.SelectedValue = BB.ToString();
CallRoleLoad();
//Now set the SelectedValue of Role since it's filled with eligible valuse
CallRole_DrpDwnLst.SelectedValue = CC.ToString();
}
else //no rows found, clear selection
{
CallBus_DrpDwnLst.SelectedIndex = 0;
CallLOB_DrpDwnLst.SelectedIndex = 0;
CallRole_DrpDwnLst.SelectedIndex = 0;
}
//close the reader
reader.Close();
oConn.Close();
}
catch (Exception ex)
{
// Handle the error
Response.Write(ex.Message);
//ErrorLogging.WriteToEventLog(ex);
}
}
私がいる問題は、ラインreader = cmd.ExecuteReader()
に私はエラーを取得していますということです。
ORA-01036: illegal variable name/number
誰もが私を助けることができますこの?私はstrUserIDがコードをステップ実行している間にチェックしたので、strUserIDが正しく解決することを知っています。
。それを ':strUserID'に変更し、addWithValueを' strUserID'に変更すれば幸いですか? –
今は「SQLコマンドが正しく終了していません」と言っています。 –
セミコロンをコマンドの最後に置かずに、ORA-00911を与える必要があります。あなたの運転手がそれをキャッチしていない限り。 –