-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();
            }
        }

    }
4

3 に答える 3

0

Access データベース内では、フィールドのデータ型は「数値」で、フィールド サイズは「長整数」です。

あなたは長く使っていません:

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

誰かが DB フィールドを int > long から変更したと思いますか?

于 2013-09-25T15:02:02.837 に答える