2013-09-25 94 views
-2

我不知道發生了什麼事。此代碼昨天工作正常,但今天當我嘗試運行它時,我在標記的位置收到「指定的轉換無效」錯誤。該查詢返回1 &之間的整數25.在Access數據庫中,該字段的數據類型爲'數字',字段大小='長整數'。無效,但它曾經是

任何線索如何糾正?

static void PopulateClientList() 
    { 
     Console.WriteLine("Populating Client List..."); 
     Console.WriteLine("\r"); 
     OleDbConnection conn = new OleDbConnection(strAccessConnABS); 
     string query = "SELECT DISTINCT Client FROM ORDERS WHERE Status = 'On Hold';"; 
     OleDbCommand command = new OleDbCommand(query, conn); 

     conn.Open(); 
     OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn); 
     //OleDbDataReader reader = command.ExecuteReader(); 
     DataTable dt = new DataTable(); 
     try 
     { 

      //if (reader.HasRows) 
      //{ 
       // while (reader.Read()) 
       // { 
        //clientlist.Add(reader.GetInt32(0)); //cast not valid error happens here 
       //} 
      // } 

      adapter.Fill(dt); 

      if (dt.Rows.Count >= 1) 
      { 
       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        if (dt.Rows[i][0].ToString() != "") 
        clientlist.Add((int)dt.Rows[i][0]); 
       } 
      } 
     } 
     catch (OleDbException ex) 
     { 
     } 
     finally 
     { 
      if (conn.State == ConnectionState.Open) 
      { 
       conn.Close(); 
      } 
     } 

    } 
+1

你在代碼中改變了什麼?你在數據庫中改變了什麼? – meilke

+0

拋出異常時reader [0]的值是什麼? – Jonesopolis

+0

Convert.ToInt32(reader.GetValue(0))? – Krishna

回答

1

你的問題很可能是超過最大的Int32一個值可能已經被添加到您的表。在此之前,您的代碼不會拋出異常。

該字段的數據類型爲'number',字段大小='long integer'。

那你爲什麼讀它作爲一個Int32這裏?:

clientlist.Add(reader.GetInt32(0)); //cast not valid error happens here 

將其更改爲:

clientlist.Add(reader.GetInt64(0)); 

根據什麼clientlist是,你必須改變它的類型也接受Int64

0

Access數據庫內,該字段是用 場尺寸=「長整型」數據類型「編號」的。

您沒有使用長:

clientlist.Add(reader.GetInt32(0)); //cast not valid error happens here -> Use GetInt64 

我想有人從int改爲數據庫字段>長?

0

我剛剛注意到了這個問題。不知道它是如何發生的。當我運行查詢時,數據庫內部的第一行是空白的。當讀者閱讀並嘗試將其添加到列表中時,它不會這樣做,因爲它是空值。

+0

我編輯了OP,以反映我如何解決問題。 – MaylorTaylor

相關問題