2011-11-23 51 views
1

我有组SQL语句通过和参数:与参数和OleDbCommand的工作。在分组时,Crystal Reports

string comstring = 
    "SELECT NOVI.GBR as gbrnov, 
      NOVI.AB as abnov, 
      NALOG1.DATA as datanov, 
      Min(NALOG1.POCKM) AS MinOfPOCKM, 
      Max(NALOG1.KRAJKM) AS MaxOfKRAJKM, 
      (Max(NALOG1.KRAJKM)-Min(NALOG1.POCKM)) AS RAZLIKA, 
      Count(IIf(([MAGACIN.SIFRA]='0991000'),[MAGACIN.KOL],Null)) AS Gorivo, 
      Avg(IIf(([MAGACIN.SIFRA]='0991000'),[MAGACIN.KOL],Null)/100) AS potrosgor100km, 
      Sum(IIf(([MAGACIN.SIFRA]='0993050' Or [MAGACIN.SIFRA]='0993051'),[MAGACIN.KOL],Null)) AS Motmaslo, 
      Sum(IIf(([MAGACIN.SIFRA]='0992201'),[MAGACIN.KOL],Null)) AS Addblue, 
      ([Addblue]/[Gorivo])*100 AS Addbluegor, 
      Sum(IIf(([MAGACIN.SIFRA]='0999001'),[MAGACIN.KOL],Null)) AS Antifriz, 
      NOVI.DATAP, 
      NOVI.DATAS, 
      IIf(([NOVI].[KM]<=([NOVI].[KMS1]+[NOVI].[KMS2])),'ZA SERVIS',(IIf(([NOVI].[KM]<=([NOVI].[KMP1]+[NOVI].[KMP2])),'PROVERKA',''))) AS Zabeleska 
    FROM (NALOG1 INNER JOIN NOVI ON NALOG1.GBRV = NOVI.GBR) 
    INNER JOIN MAGACIN ON NOVI.GBR = MAGACIN.GBR 
     where (((NOVI.GBR)>=? And (NOVI.GBR)<=?) 
      AND (((NOVI.AB)=?) 
      OR ((NOVI.AB)=?)) 
      AND ((NALOG1.DATA)<=? and (NALOG1.DATA)>=?)) 
    GROUP BY NOVI.GBR, 
       NOVI.AB, 
       NALOG1.DATA, 
       ([Addblue]/[Gorivo])*100, 
       NOVI.DATAP, 
       NOVI.DATAS, 
       IIf(([NOVI].[KM]<=([NOVI].[KMS1]+[NOVI].[KMS2])),'ZA SERVIS',(IIf(([NOVI].[KM]<=([NOVI].[KMP1]+[NOVI].[KMP2])),'PROVERKA','')))"; 

我得到一个错误No value given for one or more required parameters

oleDBDataAdapter1.Fill(dataSet2,"Tabela"); 

当某些值使用它如:

string comstring = 
    "SELECT NOVI.GBR as gbrnov, 
      NOVI.AB as abnov, 
      NALOG1.DATA as datanov, 
      Min(NALOG1.POCKM) AS MinOfPOCKM, 
      Max(NALOG1.KRAJKM) AS MaxOfKRAJKM, 
      (Max(NALOG1.KRAJKM)-Min(NALOG1.POCKM)) AS RAZLIKA, 
      Count(IIf(([MAGACIN.SIFRA]='0991000'),[MAGACIN.KOL],Null)) AS Gorivo, 
      Avg(IIf(([MAGACIN.SIFRA]='0991000'),[MAGACIN.KOL],Null)/100) AS potrosgor100km, 
      Sum(IIf(([MAGACIN.SIFRA]='0993050' Or [MAGACIN.SIFRA]='0993051'),[MAGACIN.KOL],Null)) AS Motmaslo, 
      Sum(IIf(([MAGACIN.SIFRA]='0992201'),[MAGACIN.KOL],Null)) AS Addblue, 
      ([Addblue]/[Gorivo])*100 AS Addbluegor, 
      Sum(IIf(([MAGACIN.SIFRA]='0999001'),[MAGACIN.KOL],Null)) AS Antifriz, 
      NOVI.DATAP, 
      NOVI.DATAS, 
      IIf(([NOVI].[KM]<=([NOVI].[KMS1]+[NOVI].[KMS2])),'ZA SERVIS',(IIf(([NOVI].[KM]<=([NOVI].[KMP1]+[NOVI].[KMP2])),'PROVERKA',''))) AS Zabeleska 
    FROM (NALOG1 INNER JOIN NOVI ON NALOG1.GBRV = NOVI.GBR) 
    INNER JOIN MAGACIN ON NOVI.GBR = MAGACIN.GBR 
     where (((NOVI.GBR)>='1001' And (NOVI.GBR)<='1080') 
     AND (((NOVI.AB)='AK') 
     OR ((NOVI.AB)='AK')) 
     AND ((NALOG1.DATA)<=#10/31/2011# 
     and (NALOG1.DATA)>=#10/31/2011#)) 
    GROUP BY NOVI.GBR, 
       NOVI.AB, 
       NALOG1.DATA, 
       ([Addblue]/[Gorivo])*100, 
       NOVI.DATAP, 
       NOVI.DATAS, 
       IIf(([NOVI].[KM]<=([NOVI].[KMS1]+[NOVI].[KMS2])),'ZA SERVIS',(IIf(([NOVI].[KM]<=([NOVI].[KMP1]+[NOVI].[KMP2])),'PROVERKA','')))"; 

没有任何问题。

有人可以帮我吗?

回答

0

它的问题与您的查询:

where (((NOVI.GBR)>=? And (NOVI.GBR)<=?) 
      AND (((NOVI.AB)=?) 
      OR ((NOVI.AB)=?)) 
      AND ((NALOG1.DATA)<=? and (NALOG1.DATA)>=?)) 

您需要提供的,而不是?应有的价值,也许你可能会做'?',但我认为它不会(NALOG1.DATA)工作(通过观察你的其他查询我猜,它的数据类型是注释Date

编辑:

如果您正在使用参数,那么您需要按照使用?的顺序传递它们。如果您在查询中使用6 ?不能使用命名参数,如以下,在oledbcommand

command.Parameters.AddWithValue("@param1", "1001"); 

然后,你需要按顺序通过6个参数。

 OleDbParameter[] oledbParams = new OleDbParameter[6]; 

     //To be added in proper order. 
     oledbParams[0] = new OleDbParameter("PN1", "1001"); 
     oledbParams[1] = new OleDbParameter("PN2", "1002"); 
     . 
     . 
     oledbParams[6] = new OleDbParameter("DateValue", DateTime.Now.Date); 

     foreach (var p in oledbParams) 
     { 
      command.Parameters.Add(p); 
     } 
+0

是的,问题出在那一部分。当我把正确的价值,如上所示,它工作正常。但是当我想使用用户选择的值时,在按下按钮之前使用表单,出现错误。那么,什么时候用?参数。我试过了 '?'以及,但没有改变。这里是我如何填写?:if(radioButton5.Checked == true) { command.Parameters.AddWithValue(“@ gbr1”,“1001”); command.Parameters.AddWithValue(“@ gbr2”,“1080”); button1.Enabled = true; textBox1.Text =“”; } ...... – user963833

+0

当你使用'Parameters'时,你必须将它们分配给合适的字段而不是'?' – NaveenBhat

+0

是的,我知道,我按照适当的顺序使用它们,而我使用6参数。当我使用它,因为你建议我command.Parameters.Add(“1001”);我得到这个错误:OleDbParameterCollection只接受非空的OleDbParameter类型对象,而不是String对象。 – user963833