2011-07-15 54 views
-1

我在C++中運行查詢,但無法正確處理日期。我想約會以24小時日期時間格式返回(dd/mm/yyyy Hh24:mi:ss)。我已經在MS Access中運行查詢,如下所示:24選擇查詢的數據格式

SELECT Format(Data.[Date/Time],'mm/dd/yyyy hh:nn:ss'), DATA.[Hot Strip Mill Total], DATA.[Basic Oxygen Furnace Total], DATA.[Electro-Arc Furnace Total], DATA.[J-9 Shop Total], DATA.[Levy Maintence Building Total], DATA.[Ford Body Shop Total], DATA.[Ford Chiller Building Total], DATA.[Ford Dearborn W Plant Total], DATA.[Ford Dearborn E Plant Total], DATA.[Ford Dearborn Balcony Total], DATA.[Ford Final Assembly Total], DATA.[Ford Frame Plant Total], DATA.[Ford Dearborn N Plant Total], DATA.[Ford Tool and Die Total], DATA.[Ford Paint Plant Total], DATA.[Ford Glass Plant Total], DATA.[Hot Strip Mill Rate], DATA.[Basic Oxygen Furnace Rate], DATA.[Electro-Arc Furnace Rate], DATA.[J-9 Shop Rate], DATA.[Levy Maintence Building Rate], DATA.[Ford Body Shop Rate], DATA.[Ford Chiller Building Rate], DATA.[Ford Dearborn W Plant Rate], DATA.[Ford Dearborn E Plant Rate], DATA.[Ford Dearborn Balcony Rate], DATA.[Ford Final Assembly Rate], DATA.[Ford Frame Plant Rate], DATA.[Ford Dearborn N Plant Rate], DATA.[Ford Tool and Die Rate], DATA.[Ford Paint Plant Rate], DATA.[Ford Glass Plant Rate] 
FROM DATA; 

它運行良好;然而,當我在我的代碼運行此我得到以下錯誤:

System.IndexOutOfRangeException:日期/時間 在System.Data.ProviderBase.FieldNameLookUp.GetOrdinal(字符串字段名)

在system.Data.Odbc .OdbcDataReader.GetOrdinal(字符串值)

在System.Data.Odbc.OdbcDataReader.get_Item(字符串值)

...在我的代碼120線

代碼有人幫我意義這個的。這是我現在必須處理的代碼的最後一個組件,我真的很樂意完成它,謝謝你的幫助。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Linq; 
using System.Text; 
using System.Data.OracleClient; 
using System.Data.SqlClient; 
using System.IO; 
using System.Data.Odbc; 

namespace ConsoleApplication7 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     string connectionString = "Dsn=Gas_meter_check"; 

     string dayTime = ""; 
     string hsmt = ""; 
     string boft = ""; 
     string eaft = ""; 
     string j9st = ""; 
     string lmbt = ""; 
     string fbst = ""; 
     string fcbt = ""; 
     string fdwpt =""; 

     string fdept = ""; 
     string fdbt = ""; 
     string ffat = ""; 
     string ffpt = ""; 
     string fdnpt = ""; 
     string ftdt = ""; 
     string fppt = ""; 
     string fgpt = ""; 

     string hsmr = ""; 
     string bofr = ""; 
     string eafr = ""; 
     string j9sr = ""; 
     string lmbr = ""; 
     string fbsr = ""; 
     string fcbr = ""; 
     string fdwpr = ""; 

     string fdepr = ""; 
     string fdbr = ""; 
     string ffar = ""; 
     string ffpr = ""; 
     string fdnpr = ""; 
     string ftdr = ""; 
     string fppr = ""; 
     string fgpr = ""; 

     string sqlins = ""; 
     string connString = "DSN=Gas_Reporter_proj;Uid=rouge;Pwd=steel"; 
     OdbcConnection conn = new OdbcConnection(connString); 

     OdbcConnection DbConnection = new OdbcConnection(connectionString); 
     OdbcCommand DbCommand = DbConnection.CreateCommand(); 
     DbConnection.Open(); 
     //DbCommand.CommandText = "SELECT Data.[Date/Time],Data.[Basic Oxygen Furnace Total],Data.[Electro-Arc Furnace Total],Data.[J-9 Shop Total],Data.[Levy Maintence Building Total],Data.[Ford Body Shop Total], Data.[Ford Chiller Building Total],Data.[Ford Dearborn W Plant Total],Data.[Ford Dearborn E Plant Total], Data.[Ford Dearborn Balcony Total], Data.[Ford Final Assembly Total],Data.[Ford Frame Plant Total], Data.[Ford Dearborn N Plant Total],Data.[Ford Tool and Die Total], Data.[Ford Paint Plant Total],Data.[Ford Glass Plant Total], Data.[Basic Oxygen Furnace Rate], Data.[Electro-Arc Furnace Rate],Data.[J-9 Shop Rate],Data.[Levy Maintence Building Rate],Data.[Ford Body Shop Rate],Data.[Ford Chiller Building Rate],Data.[Ford Dearborn W Plant Rate],Data.[Ford Dearborn E Plant Rate],Data.[Ford Dearborn Balcony Rate],Data.[Ford Final Assembly Rate],Data.[Ford Frame Plant Rate],Data.[Ford Dearborn N Plant Rate],Data.[Ford Tool and Die Rate],Data.[Ford Paint Plant Rate],Data.[Ford Glass Plant Rate]FROM DATA"; 
     //THIS IS FOR WHEN THE THE INITIAL DATA IS UPLOADED 
     //DbCommand.CommandText = "SELECT Data.[Date/Time],Data.[Basic Oxygen Furnace Total],Data.[Electro-Arc Furnace Total],Data.[J-9 Shop Total],Data.[Levy Maintence Building Total],Data.[Ford Body Shop Total], Data.[Ford Chiller Building Total],Data.[Ford Dearborn W Plant Total],Data.[Ford Dearborn E Plant Total], Data.[Ford Dearborn Balcony Total], Data.[Ford Final Assembly Total],Data.[Ford Frame Plant Total], Data.[Ford Dearborn N Plant Total],Data.[Ford Tool and Die Total], Data.[Ford Paint Plant Total],Data.[Ford Glass Plant Total], Data.[Basic Oxygen Furnace Rate], Data.[Electro-Arc Furnace Rate],Data.[J-9 Shop Rate],Data.[Levy Maintence Building Rate],Data.[Ford Body Shop Rate],Data.[Ford Chiller Building Rate],Data.[Ford Dearborn W Plant Rate],Data.[Ford Dearborn E Plant Rate],Data.[Ford Dearborn Balcony Rate],Data.[Ford Final Assembly Rate],Data.[Ford Frame Plant Rate],Data.[Ford Dearborn N Plant Rate],Data.[Ford Tool and Die Rate],Data.[Ford Paint Plant Rate],Data.[Ford Glass Plant Rate]FROM DATA WHERE Format(Data.[Date/Time], 'mm/dd/yyyy') >=(select Format(max(Data.[Date/Time]),'mm/dd/yyyy') from DATA)"; 
     // THIS IS FOR WHEN THE HOT MILL WORKING; 
     DbCommand.CommandText = "SELECT Format(Data.[Date/Time],'mm/dd/yyyy hh:nn:ss'),DATA.[Hot Strip Mill Total],Data.[Basic Oxygen Furnace Total],Data.[Electro-Arc Furnace Total],Data.[J-9 Shop Total],Data.[Levy Maintence Building Total],Data.[Ford Body Shop Total], Data.[Ford Chiller Building Total],Data.[Ford Dearborn W Plant Total],Data.[Ford Dearborn E Plant Total], Data.[Ford Dearborn Balcony Total], Data.[Ford Final Assembly Total],Data.[Ford Frame Plant Total], Data.[Ford Dearborn N Plant Total],Data.[Ford Tool and Die Total], Data.[Ford Paint Plant Total],Data.[Ford Glass Plant Total], DATA.[Hot Strip Mill Rate], Data.[Basic Oxygen Furnace Rate], Data.[Electro-Arc Furnace Rate],Data.[J-9 Shop Rate],Data.[Levy Maintence Building Rate],Data.[Ford Body Shop Rate],Data.[Ford Chiller Building Rate],Data.[Ford Dearborn W Plant Rate],Data.[Ford Dearborn E Plant Rate],Data.[Ford Dearborn Balcony Rate],Data.[Ford Final Assembly Rate],Data.[Ford Frame Plant Rate],Data.[Ford Dearborn N Plant Rate],Data.[Ford Tool and Die Rate],Data.[Ford Paint Plant Rate],Data.[Ford Glass Plant Rate]FROM DATA"; 
     //WHERE Format(Data.[Date/Time], 'mm/dd/yyyy') >=(select Format(max(Data.[Date/Time]),'mm/dd/yyyy') from DATA) 
     OdbcDataReader DbReader = DbCommand.ExecuteReader(); 
     int fCount = DbReader.FieldCount; 
try 
{ 
     OdbcCommand cmdnon = new OdbcCommand(sqlins, conn);        
     conn.Open(); 

     cmdnon.Parameters.Add(dayTime, OdbcType.DateTime); 
     cmdnon.Parameters.Add(hsmt, OdbcType.Numeric); 
     cmdnon.Parameters.Add(boft, OdbcType.Numeric); 
     cmdnon.Parameters.Add(eaft, OdbcType.Numeric); 
     cmdnon.Parameters.Add(j9st, OdbcType.Numeric); 
     cmdnon.Parameters.Add(lmbt, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fbst, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fcbt, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fdwpt, OdbcType.Numeric); 

     cmdnon.Parameters.Add(fdept, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fdbt, OdbcType.Numeric); 
     cmdnon.Parameters.Add(ffat, OdbcType.Numeric); 
     cmdnon.Parameters.Add(ffpt, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fdnpt, OdbcType.Numeric); 
     cmdnon.Parameters.Add(ftdt, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fppt, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fgpt, OdbcType.Numeric); 

     cmdnon.Parameters.Add(hsmr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(bofr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(eafr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(j9sr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(lmbr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fbsr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fcbr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fdwpr, OdbcType.Numeric); 

     cmdnon.Parameters.Add(fdepr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fdbr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(ffar, OdbcType.Numeric); 
     cmdnon.Parameters.Add(ffpr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fdnpr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(ftdr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fppr, OdbcType.Numeric); 
     cmdnon.Parameters.Add(fgpr, OdbcType.Numeric); 




     while (DbReader.Read()) 
        { 
         dayTime = DbReader["Date/Time"].ToString(); 
         hsmt = DbReader["Hot Strip Mill Total"].ToString();  
         boft = DbReader["Basic Oxygen Furnace Total"].ToString(); 
         eaft = DbReader["Electro-Arc Furnace Total"].ToString(); 
         j9st = DbReader["J-9 Shop Total"].ToString(); 
         lmbt = DbReader["Levy Maintence Building Total"].ToString(); 
         fbst = DbReader["Ford Body Shop Total"].ToString();  
         fcbt = DbReader["Ford Chiller Building Total"].ToString(); 
         fdwpt = DbReader["Ford Dearborn W Plant Total"].ToString(); 


         fdept = DbReader["Ford Dearborn E Plant Total"].ToString(); 
         fdbt = DbReader["Ford Dearborn Balcony Total"].ToString();  
         ffat = DbReader["Ford Final Assembly Total"].ToString(); 
         ffpt = DbReader["Ford Frame Plant Total"].ToString(); 
         fdnpt = DbReader["Ford Dearborn N Plant Total"].ToString(); 
         ftdt = DbReader["Ford Tool and Die Total"].ToString();  
         fppt = DbReader["Ford Paint Plant Total"].ToString();  
         fgpt = DbReader["Ford Glass Plant Total"].ToString(); 

         hsmr = DbReader["Hot Strip Mill Rate"].ToString(); 
         bofr = DbReader["Basic Oxygen Furnace Rate"].ToString(); 
         eafr = DbReader["Electro-Arc Furnace Rate"].ToString(); 
         j9sr = DbReader["J-9 Shop Rate"].ToString();   
         lmbr = DbReader["Levy Maintence Building Rate"].ToString();        
         fbsr = DbReader["Ford Body Shop Rate"].ToString(); 
         fcbr = DbReader["Ford Chiller Building Rate"].ToString(); 
         fdwpr = DbReader["Ford Dearborn W Plant Rate"].ToString(); 

         fdepr = DbReader["Ford Dearborn E Plant Rate"].ToString(); 
         fdbr = DbReader["Ford Dearborn Balcony Rate"].ToString(); 
         ffar = DbReader["Ford Final Assembly Rate"].ToString(); 
         ffpr = DbReader["Ford Frame Plant Rate"].ToString();  
         fdnpr = DbReader["Ford Dearborn N Plant Rate"].ToString(); 
         ftdr = DbReader["Ford Tool and Die Rate"].ToString();  
         fppr = DbReader["Ford Paint Plant Rate"].ToString();  
         fgpr = DbReader["Ford Glass Plant Rate"].ToString(); 

         //cmdnon.CommandText = "insert into NAT_GAS_READINGS(BOF_TOTAL,EAF_TOTAL,J9_SHOP_TOTAL,LEVY_TOTAL,BODY_SHOP_TOTAL,CHILLER_BLDG_TOTAL,WPLANT_TOTAL,EPLANT_TOTAL,BALCONY_TOTAL,FINAL_ASSEMBLY_TOTAL,FRAME_PLANT_TOTAL,NPLANT_TOTAL,TOOL_DIE_TOTAL,PAINT_PLANT_TOTAL,GLASS_PLANT_TOTAL,BOF,EAF,J9_SHOP,LEVY,BODY_SHOP,CHILLER_BLDG,WPLANT,EPLANT,BALCONY,FINAL_ASSEMBLY,FRAME_PLANT,NPLANT,TOOL_DIE,PAINT_PLANT,GLASS_PLANT,DATETIME) values (to_number(1564),to_number(1385), to_number(87886),to_number(687489.25),to_number(9879.35),to_number(897.54),to_number(98754.38),to_number(768.47), to_number(654), to_number(897896),to_number(8978.18),to_number(897234), to_number(3546.28),to_number(54798),to_number(65496), to_number(6487), to_number(98796), to_number(6485), to_number(5488), to_number(65496),to_number(65465),to_number(1411), to_number(3354), to_number(54879),to_number(35),to_number(21),to_number(325),to_number(3215),to_number(3215),to_number(214))"; 
         //cmdnon.CommandText = "insert into NAT_GAS_READINGS(BOF_TOTAL,EAF_TOTAL,J9_SHOP_TOTAL,LEVY_TOTAL,BODY_SHOP_TOTAL,CHILLER_BLDG_TOTAL,WPLANT_TOTAL,EPLANT_TOTAL,BALCONY_TOTAL,FINAL_ASSEMBLY_TOTAL,FRAME_PLANT_TOTAL,NPLANT_TOTAL,TOOL_DIE_TOTAL,PAINT_PLANT_TOTAL,GLASS_PLANT_TOTAL,BOF,EAF,J9_SHOP,LEVY,BODY_SHOP,CHILLER_BLDG,WPLANT,EPLANT,BALCONY,FINAL_ASSEMBLY,FRAME_PLANT,NPLANT,TOOL_DIE,PAINT_PLANT,GLASS_PLANT,DATETIME) values (to_number('" + boft + "'), to_number('" + eaft + "'), to_number('" + j9st + "'), to_number('" + lmbt + "'),to_number('" + fbst + "'),to_number('" + fcbt + "'),to_number('" + fdwpt + "'), to_number('" + fdept + "'), to_number('" + fdbt + "'), to_number('" + ffat + "'), to_number('" + ffpt + "'), to_number('" + fdnpt + "'), to_number('" + ftdt + "'), to_number('" + fppt + "'), to_number('" + fgpt + "'), to_number('" + bofr + "'), to_number('" + eafr + "'), to_number('" + j9sr + "'), to_number('" + lmbr + "'), to_number('" + fbsr + "'), to_number('" + fcbr + "'), to_number('" + fdwpr + "'), to_number('" + fdepr + "'), to_number('" + fdbr + "'), to_number('" + ffar + "'), to_number('" + ffpr + "'), to_number('" + fdnpr + "'), to_number('" + ftdr + "'), to_number('" + fppr + "'),to_number('" + fgpr + "'),to_date('" + dayTime + "', 'MM/DD/YYYY HH:MI:SS AM'))"; 
         //cmdnon.CommandText = "insert into NAT_GAS_READINGS(HSM_TOTAL,BOF_TOTAL,EAF_T0TAL,J9_SHOP_TOTAL,LEVY_TOTAL,BODY_SHOP_TOTAL,CHILLER_BLDG_TOTAL,WPLANT_TOTAL,EPLANT_TOTAL,BALCONY_TOTAL,FINAL_ASSEMBLY_TOTAL,FRAME_PLANT_TOTAL,NPLANT_TOTAL,TOOL_DIE_TOTAL,PAINT_PLANT_TOTAL,GLASS_PLANT_TOTAL,HSM,BOF,EAF,J9_SHOP,LEVY,BODY_SHOP,CHILLER_BLDG,WPLANT,EPLANT,BALCONY,FINAL_ASSEMBLY,FRAME_PLANT,NPLANT,TOOL_DIE,PAINT_PLANT,GLASS_PLANT,DATETIME) values (to_number('" + hsmt + "'), to_number('" + boft + "'), to_number('" + eaft + "'), to_number('" + j9st + "'), to_number('" + lmbt + "'),to_number('" + fbst + "'),to_number('" + fcbt + "'), to_number('" + fdwpt + "'), to_number('" + fdept + "'), to_number('" + fdbt + "'), to_number('" + ffat + "'), to_number('" + ffpt + "'), to_number('" + fdnpt + "'), to_number('" + ftdt + "'), to_number('" + fppt + "'), to_number('" + fgpt + "'), to_number('" + hsmr + "'), to_number('" + bofr + "'), to_number('" + eafr + "'), to_number('" + j9sr + "'), to_number('" + lmbr + "'), to_number('" + fbsr + "'), to_number('" + fcbr + "'), to_number('" + fdwpr + "'), to_number('" + fdepr + "'), to_number('" + fdbr + "'), to_number('" + ffar + "'), to_number('" + ffpr + "'), to_number('" + fdnpr + "'), to_number('" + ftdr + "'), to_number('" + fppr + "'), to_number('" + fgpr + "'), to_date('" + dayTime + "', 'MM/DD/YYYY HH24:MI:SS'))"; 
         cmdnon.CommandText = "insert into NAT_GAS_READINGS(HSM_TOTAL,BOF_TOTAL,EAF_TOTAL,J9_SHOP_TOTAL,LEVY_TOTAL,BODY_SHOP_TOTAL,CHILLER_BLDG_TOTAL,WPLANT_TOTAL,EPLANT_TOTAL,BALCONY_TOTAL,FINAL_ASSEMBLY_TOTAL,FRAME_PLANT_TOTAL,NPLANT_TOTAL,TOOL_DIE_TOTAL,PAINT_PLANT_TOTAL,GLASS_PLANT_TOTAL,HSM,BOF,EAF,J9_SHOP,LEVY,BODY_SHOP,CHILLER_BLDG,WPLANT,EPLANT,BALCONY,FINAL_ASSEMBLY,FRAME_PLANT,NPLANT,TOOL_DIE,PAINT_PLANT,GLASS_PLANT,DATETIME) values (to_number('" + hsmt + "'), to_number('" + boft + "'), to_number('" + eaft + "'), to_number('" + j9st + "'), to_number('" + lmbt + "'),to_number('" + fbst + "'),to_number('" + fcbt + "'), to_number('" + fdwpt + "'), to_number('" + fdept + "'), to_number('" + fdbt + "'), to_number('" + ffat + "'), to_number('" + ffpt + "'), to_number('" + fdnpt + "'), to_number('" + ftdt + "'), to_number('" + fppt + "'), to_number('" + fgpt + "'), to_number('" + hsmr + "'), to_number('" + bofr + "'), to_number('" + eafr + "'), to_number('" + j9sr + "'), to_number('" + lmbr + "'), to_number('" + fbsr + "'), to_number('" + fcbr + "'), to_number('" + fdwpr + "'), to_number('" + fdepr + "'), to_number('" + fdbr + "'), to_number('" + ffar + "'), to_number('" + ffpr + "'), to_number('" + fdnpr + "'), to_number('" + ftdr + "'), to_number('" + fppr + "'), to_number('" + fgpr + "'), to_date('01/24/1987 23:54:12', 'MM/DD/YYYY HH24:MI:SS'))"; 
         int rowsAffected = cmdnon.ExecuteNonQuery(); 
         Console.WriteLine(rowsAffected); 

        } 


       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.ToString()); 
       } 
       finally 
       { 
        conn.Close();      
       } 
    DbReader.Close(); 
    DbCommand.Dispose(); 
    DbConnection.Close(); 
    } 

} 
} 
+0

我只是想補充一點,我沒有創建Access表,所以我不負責列名的可怕格式。 –

+0

正確的標籤?代碼看起來更像C#。 –

+0

日期格式是一個表示層的問題,你不應該擔心你的SQL。 –

回答

0

http://msdn.microsoft.com/en-us/library/90a7b8k5.aspx

OdbcDataReader說明::項目

IndexOutOfRangeException : No column with the specified name was found. 

顯然,在命名數據庫表列的問題。

提示:嘗試先按字段號獲取字段。然後嘗試OdbcDataReader::GetName(number)以獲取列名稱。

編輯:

dayTime = DbReader.GetString(0); // or 
dayTime = DbReader.GetString("Date/Time"); 

似乎更具可讀性給我。

+0

我不認爲有一個名稱BC的問題我添加了以下行: 控制檯.WriteLine(DbReader [「Date/time」]。ToString()); afterdaytime = DbReader [「Date/time」]。ToString()); –

+0

@Dante:是的,但是您不應該從'DbReader [...]'中的方括號中得到一個IndexOutOfRangeException,這表示沒有從列名稱字符串到從零開始的列號的映射。現在你用'Date/time'而不是'Date/Time''?也許SQL不區分大小寫,但C#是。 –

+0

我不認爲名稱BC有問題我添加了以下行: Console.WriteLine(DbReader [「Date/time」]。ToString()); daytime = DbReader [「Date/time」]。ToString()); 然後當我在該行後面運行程序時,我收到了其給定格式的數據。我仍然需要 這種格式的數據:「2011/7/1 16:01:07」而不是「07/1/2011 4:01:07 PM」 –