簡體   English   中英

Oracle無效號碼

[英]Oracle Invalid Number

我正在嘗試在日期之間進行搜索並進行分頁。 但是我遇到錯誤“ ORA-01722:無效號碼”,我該如何解決此感謝。

 public IEnumerable<LaboratuvarTest> ListePagingTariheGore(int SAYFA, DateTime tarihbaslangic, DateTime tarihbitis)
    {
        string tarihbas = tarihbaslangic.ToString("dd-MM-yyyy");
        string tarihbit = tarihbitis.ToString("dd-MM-yyyy");
        DateTime b = tarihbaslangic.ToLocalTime();
        DateTime d = tarihbitis.Date;
        if (!connection.Baglan()) return null;
        OracleCommand cmd = new OracleCommand();
        cmd.CommandText = "SELECT * FROM(SELECT a.*, rownum r__ FROM(SELECT ID,BARKOD,RUTUBET,COPSAP,OKSIDEEDILMEMISPARCA,VOLUM,DUYUSALANALIZ,DUSUNCELER,TADIM,AMBALAJKONTROL,KASAYADOKULENCAY,SELULOZ,EKSTRAT,DURUM FROM HAR_TBLLABORATUVARTEST WHERE DURUM = 1 AND TESTTARIHI BETWEEN TO_CHAR(:p2, 'dd/mm/yyyy') AND TO_CHAR(:p3, 'dd/mm/yyyy') ORDER BY TESTTARIHI DESC )a WHERE rownum < ((:p1 * 5) + 1) ) WHERE r__ >= (((:p1 - 1) * 5) + 1)";
        cmd.Parameters.Add("p1", SAYFA);
        cmd.Parameters.Add("p2", tarihbas);
        cmd.Parameters.Add("p3", tarihbit);
        cmd.Connection = connection.con;

        OracleDataReader reader = cmd.ExecuteReader();
        List<LaboratuvarTest> list = new List<LaboratuvarTest>().FromDataReader(reader).ToList();
        connection.BaglantiKapat();
        return list; ;
    }

“ ORA-01722:無效的號碼”

ID  NUMBER(5,0)
BARKOD  VARCHAR2(50 BYTE)
RUTUBET NUMBER(8,0)
COPSAP  NUMBER(8,0)
OKSIDEEDILMEMISPARCA    NUMBER(8,0)
VOLUM   NUMBER(8,0)
DUYUSALANALIZ   NUMBER(8,0)
DUSUNCELER  VARCHAR2(500 BYTE)
TADIM   VARCHAR2(500 BYTE)
AMBALAJKONTROL  VARCHAR2(500 BYTE)
KASAYADOKULENCAY    NUMBER(3,0)
SELULOZ VARCHAR2(50 BYTE)
EKSTRAT VARCHAR2(50 BYTE)
TESTTARIHI  DATE
KULLANICIREF    NUMBER(5,0)
DURUM   NUMBER(1,0)

這個桌子

{01.08.2018 00:00:00} {14.08.2018 00:00:00}這些日期即將生效。

我可以選擇何時運行內部的第一個選擇查詢,但是這3個不能一起運行idk為什么

您綁定到查詢的tarihbastarihbit參數已經是字符串,您不應在其上調用to_char 實際上,您根本不應該在其中使用字符串-您應該直接使用日期:

TESTTARIHI BETWEEN :p2 AND p3

並分別將tarihbaslangictarihbitis綁定為p2p3

您正在使用的oracle查詢需要更正。 確保:p2和:p2綁定變量是字符串,格式為“ dd / mm / yyyy”;

SELECT * FROM(SELECT a.*, rownum r__ FROM(SELECT ID,BARKOD,RUTUBET,COPSAP,OKSIDEEDILMEMISPARCA,VOLUM,DUYUSALANALIZ,DUSUNCELER,TADIM,AMBALAJKONTROL,KASAYADOKULENCAY,SELULOZ,EKSTRAT,DURUM FROM HAR_TBLLABORATUVARTEST WHERE DURUM = 1 AND TESTTARIHI BETWEEN TO_DATE(:p2, 'dd/mm/yyyy') AND TO_DATE(:p3, 'dd/mm/yyyy') ORDER BY TESTTARIHI DESC )a WHERE rownum < ((:p1 * 5) + 1) ) WHERE r__ >= (((:p1 - 1) * 5) + 1)

您已將參數定義為字符串,並按如下所示填充它們:

tarihbas = tarihbaslangic.ToString("dd-MM-yyyy")

但是,當您在查詢中使用它們時,嘗試再次將它們轉換為字符串:

TESTTARIHI BETWEEN TO_CHAR(:p2, 'dd/mm/yyyy') and TO_CHAR(:p3, 'dd/mm/yyyy') 

由於它們已經是字符串,並且因為TESTTARIHI是日期,所以將它們轉換為日期會更有意義:

TESTTARIHI BETWEEN TO_date(:p2, 'dd-mm/yyyy') and TO_date(:p3, 'dd-mm-yyyy')

更好的方法是將參數作為DATE傳遞,並且完全不需要數據類型轉換。

您可以像這樣更改數據解析

DateTime.Parse(博士[ “TARIH”]的ToString())的ToString( “DD-MM-YY”)。

我解決了問題。 這是因為從參數開始排序。 cmd.Parameters.Add("p1", tarihbas); cmd.Parameters.Add("p2", tarihbit); cmd.Parameters.Add("p3", SAYFA); 以這種風格它將起作用。 如此煩人的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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