Ich habe die Aufgabe, einige unserer C# -Code-Behind zu konvertieren, um mit Oracle anstelle von SQL Server zu arbeiten. Und meine Erfahrung mit Orakel ist ... ohhh ... 2 Tage.Richtige Verwendung von DataReader in Oracle?
So, hier ist was ich habe:
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);
}
}
Das Problem, das ich habe, ist, dass auf der Linie reader = cmd.ExecuteReader()
Ich erhalte eine Fehlermeldung:
ORA-01036: illegal variable name/number
Kann mir jemand helfen mit Dies? Ich weiß, dass strUserID ordnungsgemäß aufgelöst wird, weil ich es beim Durchlaufen des Codes überprüft habe.
, die aus sein wird '@ strUserID' Ich denke; Ist es glücklicher, wenn Sie das in ': strUserID' und den addWithValue in' strUserID' ändern? –
Jetzt sagt es mir "SQL-Befehl nicht ordnungsgemäß beendet". –
Sie wollen nicht das Semikolon am Ende des Befehls, aber das sollte Ihnen ORA-00911 geben. Es sei denn, Ihr Fahrer fängt es. –