Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранять таблицы баз данных? 
:(
    Опции темы
medos
  Дата 12.5.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Есть таблица с данными. Данные можно редактировать. Причем с данными предполагается работать на логическом уровне. Как бы попроще сохранять такую таблицу?

 smile 
 
PM MAIL   Вверх
Domestic Cat
Дата 12.5.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Код

public static DataSet SelectSqlRows(string connectionString,
    string queryString, string tableName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(queryString, connection);
        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

        connection.Open();

        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet, tableName);

        //code to modify data in DataSet here

        //Without the SqlCommandBuilder this line would fail
        adapter.Update(dataSet, tableName);

        return dataSet;
    }
}


http://msdn2.microsoft.com/en-us/library/s...andbuilder.aspx 


--------------------

PM   Вверх
Exception
Дата 12.5.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Удобнее всего через DLinq, который пока доступен только в Preview и станет частью ADO .NET 3.0. 
PM   Вверх
Domestic Cat
Дата 12.5.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(Exception @  12.5.2006,  08:20 Найти цитируемый пост)
Удобнее всего через DLinq, который пока доступен только в Preview и станет частью ADO .NET 3.0.  

Не думаю, что самый лучший совет, если учесть что большинство еще даже не на втором фрейворке. 


--------------------

PM   Вверх
medos
Дата 12.5.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Пару раз я уже слышал про sqlconnection, но я точно не знаю это ли мне нужно...

user posted image

Для проекта состоящего из нескольких форм, аналогичных вышеприведенной таблице, подойдет способ sqlconnection?
или я торможу и мне надо переделывать проект?

По заданию мне надо сделать редактируемую базу данных по железу под windows, которая в соответствии с ответами на заранее поставленные вопросы будет выдавать наиболее подходящую конфигурацию компьютера составляя ее из нескольких таблиц по типам: процессоры, видеокарты и т.д. 
PM MAIL   Вверх
alir
Дата 12.5.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



medos
Sqlconnection - это лишь специализированный объект подключения к базе данных SQL Server, не более. Начальный уровень использования базы показал Domestic Cat - юзай пример. Но сначала укажи какой формат базы данных ты собираешься исользовать (access, oracle, mysql и т.д).
 
PM MAIL ICQ   Вверх
medos
Дата 12.5.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Т.к. размеры таблицы у меня будут небольшие, то я собираюсь использовать свой формат БД, если так можно выразиться.

Т.е. "нарисовать" таблицу, заполнить ее данными, присвоить эти данные переменным (или они будут свойствами класса) и с ними уже работать с помощью логических операций.

Могу ли я как нибудь сделать "снимок" текущего состояния своей таблицы не используя никакого формата баз данных? 
PM MAIL   Вверх
mr.DUDA
Дата 13.5.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(medos @  12.5.2006,  19:40 Найти цитируемый пост)
Т.к. размеры таблицы у меня будут небольшие, то я собираюсь использовать свой формат БД, если так можно выразиться. Т.е. "нарисовать" таблицу, заполнить ее данными, присвоить эти данные переменным (или они будут свойствами класса) и с ними уже работать с помощью логических операций.

Если всё так просто, то можно хранить всю базу в XML-файле и работать с ней через DataSet. То есть, в начале работы делаем dataSet.ReadXml(fileName), потом работаем с таблицами, в конце работы сохраняем dataSet.WriteXml(fileName). Структуру таблиц можно "нарисовать" в студии, создав типизированный DataSet. Если работаем в 2003-й студии, то делаем "Add New Item... / XSD Shema" и рисуем схему базы данных, должна стоять галка "Generate dataset". DataSet автоматически генерируется на основании того что мы нарисовали. В 2005-й студии делаем "Add New Item... / DataSet" и кидаем с тулбокса таблицы. Колонки в таблицу добавляются через контекстное меню таблиц, тип данных и прочее настраивается в окне Properties. Индексы и primary key настраиваются в контекстном меню колонок.

Пример, как выглядит датасет нарисованный в студии:
user posted image 


--------------------
user posted image
PM MAIL WWW   Вверх
mr.DUDA
Дата 13.5.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Пример кода для наглядности удобства работы с датасетами:
Код

using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Data;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public void Test()
        {
            // создаём датасет
            DemoDataSet database = new DemoDataSet();

            // если XML-файл существует - зачитываем его в датасет
            if(File.Exists(@"c:\database.xml"))
                database.ReadXml(@"c:\database.xml");

            // пример, как добавлять записи в таблицы
            database.Videocards.AddVideocardsRow("GeForce 7800 GTX", "NVidia", 256);
            database.Videocards.AddVideocardsRow("Radeon X1800", "ATI", 512);
            database.Processors.AddProcessorsRow("Pentium-4 805J", 3000, "Intel");
            database.Processors.AddProcessorsRow("Athlon-FX 60", 3066, "AMD");
            database.Processors.AddProcessorsRow("Celeron-D 655", 2800, "Intel");

            // пример, как выполнять SELECT запрос
            DataRow[] intelProcessors = database.Processors.Select("Manufacturer = 'Intel'");
            foreach(DemoDataSet.ProcessorsRow processor in intelProcessors)
            {
                Trace.WriteLine(processor.Name);
            }

            // удаление одной записи из таблицы
            intelProcessors[0].Delete();
            
            // или так
            database.Videocards[0].Delete();

            // удаление всех записей из таблицы
            database.Videocards.Clear();

            // сохранение датасета в XML
            database.WriteXml(@"c:\database.xml");
        }

        public Form1()
        {
            Test();
            InitializeComponent();
        }

//...
}
 


--------------------
user posted image
PM MAIL WWW   Вверх
medos
Дата 13.5.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Спасибо за пример.

Правильно я понимаю, что надо делать 2 таблицы:
1-ая DataSet - для хранения и операций с информацией
2-ая при помощи ListView для отображения информации. 
PM MAIL   Вверх
mr.DUDA
Дата 13.5.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(medos @  13.5.2006,  12:27 Найти цитируемый пост)
Правильно я понимаю, что надо делать 2 таблицы:
1-ая DataSet - для хранения и операций с информацией
2-ая при помощи ListView для отображения информации. 

Таблица одна - в датасете. На ListView эта же таблица завязывается с пом. DataBinding-а. 


--------------------
user posted image
PM MAIL WWW   Вверх
medos
Дата 13.5.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



То есть, на ListView надо нарисовать колонки, а Items и SubItems привязать с помощью DataBindinga?

А можно пример использования DataBindinga?

listView1.DataBindings.Add(?,?); - что-то типа этого? 
PM MAIL   Вверх
mr.DUDA
Дата 13.5.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Только что проверил, на ListView не получится забиндиться, т.к. элементами (Items) являются не строки а ListViewItem-ы.
Если использовать не ListView а ListBox, то можно:
Код

        listBox1.DataSource = database.Processors;
        listBox1.ValueMember = "Id";
        listBox1.DisplayMember = "Name";
 


--------------------
user posted image
PM MAIL WWW   Вверх
Хоббит
Дата 13.5.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



medos: ты случаем не на САПРе учишься. ... нам тоже такие задачки давали в свое время 
PM MAIL   Вверх
medos
Дата 13.5.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Хоббит:
Почти... на АСУ.

Уверен на 90%, что на специальностях 220200 и 220300, такие задачи не понадобятся в будущем, т.к. в идеале специалист 220200 готовится к управлению командой программистов при проектировании АСУ (САПР) и собственно технические знания программирования необязательны.

А может осталось чего?

mr.DUDА:
Спасибо, просто нереально выручаешь!!! 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.