2013-09-25 50 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

相关问题