![](/img/trans.png)
[英]Oracle.DataAccess.Client.OracleException: ORA-00936: missing expression
[英]Oracle.DataAccess.Client.OracleException ORA-01008: not all variables bound at Oracle.DataAccess.Client
我遇到此錯誤,無法解釋:
Oracle.DataAccess.Client.OracleException ORA-01008:並非在Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx,OpoSqlValCtx * pOpoSqlValCtx,Object src,String procedure,Boolean bCheck)處綁定的所有變量.DataAccess.Client.OracleCommand.ExecuteReader(布爾重新查詢,布爾fillRequest,CommandBehavior行為)位於c:\\ inetpub \\ MiniSites \\ inscricoes \\中gestao.GestaoDefault.GeraSqlDataSourceDropDownDisciplinasSelectCommand(Int32 selectValue)處的Oracle.DataAccess.Client.OracleCommand.ExecuteReader() gestao \\ Default.aspx.cs:第501行
我的查詢:
SELECT DISTINCT
cse.t_tbdiscip.cd_discip,
cse.t_tbdiscip.ds_discip
FROM cse.t_tbdiscip, cse.t_turma, cse.t_plandisc
WHERE cse.t_plandisc.cd_curso = :CD_CURSO
AND cse.t_turma.cd_curso = :CD_CURSO
AND cse.t_plandisc.cd_activa = 'S'
AND cse.t_turma.estado = 'S'
AND cse.t_tbdiscip.cd_discip = cse.t_plandisc.cd_discip
AND cse.t_tbdiscip.cd_discip = cse.t_turma.cd_discip
AND cse.t_turma.cd_a_s_cur IS NOT NULL
AND cse.t_turma.cd_lectivo = :CD_LECTIVO
ORDER BY cse.t_tbdiscip.ds_discip
如您所見,我必須對查詢進行vars處理。 我的代碼:
OracleConnection oracleSqlConnection = new OracleConnection(ConOracleString);
try
{
// Just to see if any value is passed to the query
LiteralMensagens.Text += String.Format("Curso : " + curso + "<br /><br />");
LiteralMensagens.Text += String.Format("Lectivo : " + lectivo + "<br /><br />");
LiteralMensagens.Text += String.Format("query : " + query + "<br /><br />");
oracleSqlConnection.Open();
OracleCommand cmdOracle = new OracleCommand(query, oracleSqlConnection);
cmdOracle.CommandType = CommandType.Text;
cmdOracle.Parameters.Clear();
cmdOracle.Parameters.Add(":CD_CURSO", OracleDbType.Decimal).Value = curso;
cmdOracle.Parameters.Add(":CD_LECTIVO", OracleDbType.Varchar2).Value = lectivo;
OracleDataReader oracleDataReader = cmdOracle.ExecuteReader();
while (oracleDataReader.Read())
{
LiteralMensagens.Text += string.Format((String)oracleDataReader["DS_DISCIP"]);
}
}
catch (Exception ex)
{
從我的代碼中,我綁定了我的變量。
從Oracle數據庫:
CD_LECTIVO- VARCHAR2(7)
CD_CURSO- NUMBER(4)
我在這里檢查過,我認為我使用的是正確的類型http://msdn.microsoft.com/en-us/library/yk72thhd.aspx
有什么事嗎
您應該像這樣更改代碼(從參數名稱中省略':'
):
// ...
cmdOracle.Parameters.Add("CD_CURSO", OracleDbType.Decimal).Value = curso;
cmdOracle.Parameters.Add("CD_LECTIVO", OracleDbType.Varchar2).Value = lectivo;
//...
現在仍然無法正常工作,確實有些奇怪……我要限制2個變量,如果我注釋了其中的一個變量並在查詢中插入值(不是一個),則可以正常工作……cmdOracle.Parameters.Add接受的價值不超過1。這對任何人都有意義嗎?
這可以在查詢字符串上用var替換“:CURSO”:
String query = String.Format("SELECT DISTINCT CSE.T_TBDISCIP.CD_DISCIP, CSE.T_TBDISCIP.DS_DISCIP " +
"FROM CSE.T_TBDISCIP, CSE.T_TURMA, CSE.T_PLANDISC " +
"WHERE (CSE.T_PLANDISC.CD_CURSO = " + curso + ") " +
"AND (CSE.T_TURMA.CD_CURSO = " + curso + ") " +
"AND (CSE.T_PLANDISC.CD_ACTIVA='S') " +
"AND (CSE.T_TURMA.ESTADO='S') " +
"AND (CSE.T_TBDISCIP.CD_DISCIP=CSE.T_PLANDISC.CD_DISCIP) " +
"AND (CSE.T_TBDISCIP.CD_DISCIP=CSE.T_TURMA.CD_DISCIP) " +
"AND (CSE.T_TURMA.CD_A_S_CUR IS NOT NULL) " +
"AND (CSE.T_TURMA.CD_LECTIVO = :CD_LECTIVO) " +
"ORDER BY CSE.T_TBDISCIP.DS_DISCIP");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.