Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2012, 23:21   #1
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию Длинна массива и его элементы из Аксес

Код:
       private void button1_Click(object sender, EventArgs e)
        {
            string constr = "Data Source=db.mdb;provider=Microsoft.Jet.OLEDB.4.0";
            OleDbConnection con = new OleDbConnection(constr);
            //Выборка текста вопроса
            string str_select = "SELECT * FROM База";
            OleDbDataAdapter da = new OleDbDataAdapter(str_select, con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            string[] DByacheyki = new string[20];
            int i = 0;
            foreach (DataRow dataRow in dt.Rows)
            {
                listBox1.Items.Add(dataRow[1].ToString());
                DByacheyki[i] = dataRow[0].ToString();
                i++;
            }
        }
через foreach перебираю все значения массива.
Но вот не могу понять как на прямую использовать этот массив. например для перебора через for
И как узнать длинну этого массива. Как делаю не правильно.
Если dt.Rows это массив, то его элемент должен быть dt.Rows[1] в таком виде. Но это не правильно. Подскажите как правильно )
SaNeKBF вне форума Ответить с цитированием
Старый 12.06.2012, 15:09   #2
Ilya81
 
Регистрация: 12.06.2012
Сообщений: 5
По умолчанию

Свойство Rows - это не массив, а экземпляр класса DataRowCollection. Цикл foreach возможен, потому что наследуемый класс реализует интерфейс IEnumerable, а доступ к элементам - потому что описан
Код:
public DataRow this[int index] { get; }
Количество элементов можно узнать через свойство Count.
Ilya81 вне форума Ответить с цитированием
Старый 20.06.2012, 17:31   #3
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

dt.Rows[1] методом активного поиска выяснил что это столбик 2 из таблицы.
Но блин, не могу понять как найти конкретный рядок.
Что мне надо. Взять конкретную ячейку (например столбик 1, рядок 5) и поменять в нем значение. Было false, стало true. Как это сделать.
SaNeKBF вне форума Ответить с цитированием
Старый 21.06.2012, 09:02   #4
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Блин неужели никто не знает как изменить конкретную ячейку в аксес таблице програмно? Вроде элементарная вещь. А везде в книгах пишут как добавить строку и как прочитать значения из таблицы через foreach
Подскажите... неделю голову ломаю
SaNeKBF вне форума Ответить с цитированием
Старый 21.06.2012, 10:12   #5
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

не знаю, но думаю как и везде SQL запросом
Код:
UPDATE table
SET column1=value,
WHERE some_column=some_value
из мсдн http://msdn.microsoft.com/ru-ru/library/33y2221y.aspx
Код:
private static void AdapterUpdate(string connectionString)
{
    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        SqlDataAdapter dataAdpater = new SqlDataAdapter(
          "SELECT CategoryID, CategoryName FROM Categories",
          connection);

        dataAdpater.UpdateCommand = new SqlCommand(
           "UPDATE Categories SET CategoryName = @CategoryName " +
           "WHERE CategoryID = @CategoryID", connection);

        dataAdpater.UpdateCommand.Parameters.Add(
           "@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");

        SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
          "@CategoryID", SqlDbType.Int);
        parameter.SourceColumn = "CategoryID";
        parameter.SourceVersion = DataRowVersion.Original;

        DataTable categoryTable = new DataTable();
        dataAdpater.Fill(categoryTable);

        DataRow categoryRow = categoryTable.Rows[0];
        categoryRow["CategoryName"] = "New Beverages";

        dataAdpater.Update(categoryTable);

        Console.WriteLine("Rows after update.");
        foreach (DataRow row in categoryTable.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", row[0], row[1]);
            }
        }
    }
}
что то похожее наверное будет и для OleDbDataAdapter

Последний раз редактировалось Reskov; 21.06.2012 в 10:14.
Reskov вне форума Ответить с цитированием
Старый 22.06.2012, 00:26   #6
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Наконецто разобрался с определением координат ячейки. Таблица хранится как двумерный массив и значение интересуемой ячейки можно выдернуть ds.Tables[0].Rows[0][1]
Теперь через этот метод решил изменить ячейку. Вроде изменяется
ds.Tables[0].Rows[0][1] = "7"; Но теперь упдейт выдает ошибку. Хоть стреляйся )
Код:
       string constr = "Data Source=db.mdb;provider=Microsoft.Jet.OLEDB.4.0";
            OleDbConnection con = new OleDbConnection(constr);
            //Выборка текста вопроса
            string str_select = "SELECT * FROM База";
            OleDbDataAdapter da = new OleDbDataAdapter(str_select, con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            string[] DByacheyki = new string[20];
            int i = 0;

            con.Open();
            ds.Tables[0].Rows[0][1] = "7";
            da.Update(ds.Tables[0]);
            con.Close();
Ошибка на строку da.Update(ds.Tables[0]); Для обновления требуется действительный UpdateCommand при передаче коллекции DataRow с измененными строками.
SaNeKBF вне форума Ответить с цитированием
Старый 22.06.2012, 12:33   #7
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Господи...) посмотрите код выше... разве в нем не показан пример как прописывать UpdateCommand??? Вы пробовали так?
Reskov вне форума Ответить с цитированием
Старый 22.06.2012, 14:15   #8
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Ресков, спасибо, что хоть ты отвечаешь )
В общем это мне напоминает: Смотрю в книгу вижу фигу.
Когда не знаешь как решить задачу, не понимаешь ее, то мало того что в своем примере, так в чужом вообще не разберешся.
Просто не понимаю, если с моим вариантом подскажете, тогда я смогу понять проблему и в далнейшем не допускать )
SaNeKBF вне форума Ответить с цитированием
Старый 22.06.2012, 14:27   #9
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

ну тогда есть два варианта, вы скидываете сюда весь проект вместе с базой и я пытаюсь на скорую руку сделать, либо сами разбираетесь как писать простенькие sql запросы. С вашим кодом надо сделать тоже самое, надо просто код выше перенести на вашу структуру таблицы
Reskov вне форума Ответить с цитированием
Старый 22.06.2012, 16:31   #10
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Проект без проблем )) я же не для пентагона разработки делаю
Вложения
Тип файла: rar RabotaBaza2.rar (180.3 Кб, 11 просмотров)
SaNeKBF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив С, состоящий из N элементов. Все отрицательные элементы массива перенести в его начало и расположить по убыванию ( Делфи ) zloykoreec Помощь студентам 0 17.05.2012 11:54
Как переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами? xEk Помощь студентам 1 09.05.2012 21:20
Элементы матрицы. Все ненулевые элементы массива D(k) расположить в начале массива E(k) и подсчитать их к Вася Маклауд Помощь студентам 0 03.04.2011 17:21
Удалить из вещественного массива все элементы, отличающиеся от его максимального элемента не более чем на bingooo Паскаль, Turbo Pascal, PascalABC.NET 1 05.04.2010 20:15
Удалить из вещественного массива все элементы, отличающиеся от его максимального элемента не более чем на bingooo Помощь студентам 6 05.04.2010 18:42