2013-12-24 5 views
0

У меня есть таблица под названием «Продукты». Я хочу получить все идентификаторы всех записей и сохранить их в массиве.получить все идентификаторы из базы данных

conn = new OleDbConnection(); 
       conn.ConnectionString = "myconnectionstring"; 
       conn.Open(); 
       query = "SELECT * from Products"; 
       cmd = new OleDbCommand(query,conn); 

       reader = cmd.ExecuteReader(); 
       //Int16 a=(int)cmd.ExecuteScalar(); 

       Int16[] id = { 0 }; 

       int counter = 0; 
       while (reader.Read()) 
       { 
        counter++; 
        id[counter] = reader.GetInt16(0); //I got error here that aray is  out of bount 
       } 
       foreach (Int16 a in id) 
       { 
        Console.WriteLine(a); 
       } 
       conn.Close(); 
       return id; 

Я изменил мой код ... он бросает exception.it сказать указанный бросок не является действительным ..

conn = new OleDbConnection(); 
       conn.ConnectionString = "my connetion string"; 
       conn.Open(); 
       query = "SELECT ID from Products"; 
       cmd = new OleDbCommand(query,conn); 

       reader = cmd.ExecuteReader(); 
       //Int16 a=(int)cmd.ExecuteScalar(); 

       List<Int16> id = new List<Int16>(); 

       while (reader.Read()) 
       { 

        id.Add(reader.GetInt16(0)); 
       } 

       conn.Close(); 
       return id; 
+0

Вы уверены, что ваш первый столбец - это идентификатор, который вы хотите? используйте имя столбца, которое вы хотите, а не * –

+0

Я поменял его по-прежнему той же ошибкой. "указанное приведение недействительно." – Umerm

+0

Посмотрите на мой пример ниже, вам нужно сделать id.ToArray(); Надеюсь это поможет! –

ответ

0

Моя проблема решена. Фактически данные, которые я извлекал, были типа int32. Я просто изменяю int16 до int32.

conn = new OleDbConnection(); 
       conn.ConnectionString = "my connetion string"; 
       conn.Open(); 
       query = "SELECT ID from Products"; 
       cmd = new OleDbCommand(query,conn); 

       reader = cmd.ExecuteReader(); 
       //Int16 a=(int)cmd.ExecuteScalar(); 

       List<Int32> id = new List<Int32>(); 

       while (reader.Read()) 
       { 

        id.Add(reader.GetInt32(0)); 
       } 

       conn.Close(); 
       return id; 
1

Ваш массив идентификатор только один элемент длиной. Вместо этого используйте список.

http://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

List<int16> id = new List<int16>(); 

В ваше время цикла:

id.Add(reader.GetInt16(0)); 
+0

программа выдает исключение. он говорит: «Указанный приказ недействителен» – Umerm

+0

Какова ценность самого большого идентификатора? Это первое, что я проверил. –

+0

сейчас в базе данных есть только 2 enteries i.e 1 и 2 – Umerm

1

Ваш идентификатор массив длина 1. Вы должны переписать его немного, чтобы сделать вещи более динамичными.

Попробуйте использовать список вместо массива. Это сделает вещи намного чище.

0

Вы объявили массив, чтобы быть размером 1:

Int16 [] ID = {0};

Так что, когда вы пытаетесь идти к месту на массив, который не существует, она взрывается:

ID [счетчик] (если не счетчик = 0 ваш в беде)

Вместо попробуйте использовать Список:

Список id = новый Список();

Вот некоторые быстрый код, который должен быть довольно близко:

 conn = new OleDbConnection(); 
     conn.ConnectionString = "myconnectionstring"; 
     conn.Open(); 
     query = "SELECT * from Products"; 
     cmd = new OleDbCommand(query, conn); 

     reader = cmd.ExecuteReader(); 
     //Int16 a=(int)cmd.ExecuteScalar(); 

     List<Int16> id = new List<Int16>(); 

     int counter = 0; 
     while (reader.Read()) 
     { 
      counter++; 
      id.Add(reader.GetInt16(0)); 
     } 
     foreach (Int16 a in id) 
     { 
      Console.WriteLine(a); 
     } 
     conn.Close(); 
     return id.ToArray(); 
Смежные вопросы