簡體   English   中英

Oracle.DataAccess.Client.OracleException ORA-01008:並非所有變量都綁定在Oracle.DataAccess.Client上

[英]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

有什么事嗎

問題已解決...添加了以下內容:

cmd.BindByName = true;

發現此內容是這樣的: stackoverflow上的類似問題

您應該像這樣更改代碼(從參數名稱中省略':' ):

// ...
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM