С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/43: Рейтинг темы: голосов - 43, средняя оценка - 4.79
1 / 1 / 0
Регистрация: 19.12.2010
Сообщений: 7

Опять Update для Access

23.12.2010, 21:10. Показов 8504. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, только постигаю Адо.нет.
Прошурстил много страниц форума и так и не понял, как сделать добавление в таблицу значений.
В памяти значения добавляются, это видно при выполнении скрипта ниже приведенного.
А как правильно использовать Update не разбирусь никак (
Консольное приложение.
55 строка - неудачная попытка %)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.Data;
using System.Data.OleDb;
using System.Xml.Serialization;
 
public class MainClass
{
    public static void Main()
    {
        // Set Access connection and select strings.
        // The path to BugTypes.MDB must be changed if you build 
        // the sample from the command line:
#if USINGPROJECTSYSTEM 
        string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Project_for_C#\\BDAvto.mdb";
#else
        string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BDAvto.mdb";
#endif
        string strAccessSelect = "SELECT * FROM Avto";
 
        // Create the dataset and add the Categories table to it:
        DataSet myDataSet = new DataSet();
        OleDbConnection myAccessConn = null;
        try
        {
            myAccessConn = new OleDbConnection(strAccessConn);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: Failed to create a database connection. \n{0}", ex.Message);
            return;
        }
 
        try
        {
 
            OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);
            OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
 
            myAccessConn.Open();
            myDataAdapter.Fill(myDataSet, "Avto");
           }
        catch (Exception ex)
        {
            Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.\n{0}", ex.Message);
            return;
        }
        finally
        {
            //DataSet ds1 = new DataSet("Avto");
            DataRow dRow = myDataSet.Tables["Avto"].NewRow();
            dRow[0] = "13";
            dRow[1] = "adsfasd";
            dRow[2] = "adssgbsdfs";
            myDataSet.Tables["Avto"].Rows.Add(dRow);
            //myDataAdapter.Update();
            myAccessConn.Close();
            
        }
 
        // A dataset can contain multiple tables, so let's get them
        // all into an array:
        DataTableCollection dta = myDataSet.Tables;
        foreach (DataTable dt in dta)
        {
            Console.WriteLine("Found data table {0}", dt.TableName);
        }
 
        // The next two lines show two different ways you can get the
        // count of tables in a dataset:
        Console.WriteLine("{0} tables in data set", myDataSet.Tables.Count);
        Console.WriteLine("{0} tables in data set", dta.Count);
        // The next several lines show how to get information on
        // a specific table by name from the dataset:
        Console.WriteLine("{0} rows in Avto table", myDataSet.Tables["Avto"].Rows.Count);
        // The column info is automatically fetched from the database,
        // so we can read it here:
        Console.WriteLine("{0} columns in Avto table", myDataSet.Tables["Avto"].Columns.Count);
        DataColumnCollection drc = myDataSet.Tables["Avto"].Columns;
        int i = 0;
        foreach (DataColumn dc in drc)
        {
            // Print the column subscript, then the column's name
            // and its data type:
            Console.WriteLine("Column name[{0}] is {1}, of type {2}", i++, dc.ColumnName, dc.DataType);
        }
        DataRowCollection dra = myDataSet.Tables["Avto"].Rows;
        foreach (DataRow dr in dra)
        {
            // Print the CategoryID as a subscript, then the CategoryName:
            Console.WriteLine("CategoryName[{0}] is {1}", dr[0], dr[1]);
        }
 
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2010, 21:10
Ответы с готовыми решениями:

Работа с MS Access: описать update для datagridView
Программа для простейшего просмотра и редактирования базы из Access, но при сохранении contactsTableAdapter1.Update выдает ошибку Update...

Запрос update - пишет "Отсутствует значение для одного или нескольких требуемых параметров!" (С# Access)
Не могу разобраться с этим запросом. Пишет "Отсутствует значение для одного или нескольких требуемых параметров!" Вот кусочек кода,...

Ошибка при UPDATE MS Access
oleDbConnection1.Open(); string sql = "UPDATE Главная SET Автор ='" + textBox1.Text + "', Название='" +...

6
 Аватар для Terion
271 / 203 / 13
Регистрация: 18.06.2010
Сообщений: 491
23.12.2010, 21:18
сделайте myDataAdapter глобальным. после его создания создайте так же глобальный
C#
1
OleDbCommandBuilder cm = new OleDbCommandBuilder(myDataAdapter );
и все. потом просто в нужном месте вызовите
C#
1
myDataAdapter.Update(myDataSet);
з.ы. убедитесь, что таблица имеет первичный ключ
0
1 / 1 / 0
Регистрация: 19.12.2010
Сообщений: 7
23.12.2010, 23:51  [ТС]
Спасибо, принято, протестировано )
Конечно нахамутал с глобальными и результата не добился с добавлением. Оставил на потом решил пойти проще. Создал форму, добавил кнопку апдейт:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
 
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
        private void button1_Click(object sender, EventArgs e)
        {
            BDLoad();
        }
        private void BDLoad()
        {
            string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BD.mdb";
            string strAccessSelect = "SELECT * FROM Avto";
            DataSet myDataSet = new DataSet();
            OleDbConnection myAccessConn = new OleDbConnection(strAccessConn);           
            OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);
            OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
            
            myAccessConn.Open();
            myDataAdapter.Fill(myDataSet, "Avto");
 
            DataRow dRow = myDataSet.Tables["Avto"].NewRow();
            dRow[0] = "13";
            dRow[1] = "adsfasd";
            dRow[2] = "adssgbsdfs";
            myDataSet.Tables["Avto"].Rows.Add(dRow);            
 
            myDataAdapter.Update(myDataSet);
            myAccessConn.Close();
            label1.Text = "Изменения внесены";
        }
 
 
        
    }
}
Ругается на myDataAdapter.Update(myDataSet);
Вот такими словами Операции Update не удалось найти TableMapping["Table"] или DataTable "Table".
0
 Аватар для Terion
271 / 203 / 13
Регистрация: 18.06.2010
Сообщений: 491
24.12.2010, 10:15
если вы хотите работать с таблицами, как с ассоциативным массивом, на каждую таблицу надо создать соответствие, чтобы адаптер знал, что ему-то обновлять, когда вы пишите имя.
Вложения
Тип файла: rar WindowsFormsApplication8.rar (52.0 Кб, 119 просмотров)
0
 Аватар для Henior
79 / 79 / 15
Регистрация: 24.11.2010
Сообщений: 515
Записей в блоге: 14
25.12.2010, 00:25
попробуй так
C#
1
myDataAdapter.Update(myDataSet, "Avto");
0
 Аватар для Terion
271 / 203 / 13
Регистрация: 18.06.2010
Сообщений: 491
25.12.2010, 00:33
Цитата Сообщение от Henior Посмотреть сообщение
попробуй так
C#
1
myDataAdapter.Update(myDataSet, "Avto");
так тоже подойдет
0
1 / 1 / 0
Регистрация: 19.12.2010
Сообщений: 7
27.12.2010, 22:58  [ТС]
Спасибо, боль менее разобрался. Хотя остались непонятные моменты.
Вот что получилось с вашей помощью
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
 
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public OleDbConnection conn;
        public OleDbDataAdapter da;
        public OleDbCommandBuilder cb;
        public DataSet ds;
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
        private void button1_Click(object sender, EventArgs e)
        {
            BDLoad();
        }
        private void BDLoad()
        {
            conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BD.mdb");
            if (conn.State != ConnectionState.Open)
                conn.Open();
 
            da = new OleDbDataAdapter("SELECT * FROM Avto", conn);
 
            cb = new OleDbCommandBuilder(da);
 
            ds = new DataSet();
 
            //вариант 1 - неассоциативный
            //da.Fill(ds.Tables[0]);
 
            //ваиант 2 - ассоциативный
            da.Fill(ds, "Avto");
            da.TableMappings.Add("Table1", "Avto");
 
            //dataGridView1.DataSource = ds.Tables[0];
 
            DataRow dRow = ds.Tables["Avto"].NewRow();
            dRow[0] = "13";
            dRow[1] = "adsfasd";
            dRow[2] = "adssgbsdfs";
            ds.Tables["Avto"].Rows.Add(dRow);
            conn.Close();
            da.Update(ds.Tables["Avto"]);
            label1.Text = "Изменения внесены";
        }
 
 
        
    }
}
Только вот не пойму что происходит в этих 2ух строках
C#
1
2
3
           //ваиант 2 - ассоциативный
            da.Fill(ds, "Avto");
            da.TableMappings.Add("Table1", "Avto");
Компилятор ругался на повторяющиеся значения ключевого поля. Убрал в аксесе ключевое поле и все добовляется нормально. Вот вопрос не выйдет ли мне боком отключение ключевого поля?
И еще, подскажите как узнать номер строки которая добавится. Я понимаю, что последня заполненая + 1. Подскажите, как это будет выглядить на практике
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.12.2010, 22:58
Помогаю со студенческими работами здесь

И опять UPDATE
Надо запустить UPDATE из VBA. Из мастера запросов работает и имеет такой вид: UPDATE Рейсы SET Рейсы. = Forms!! WHERE (((Рейсы.)=!!)); ...

Опять из Access в Word
Добрый вечер! Поскольку отчеты в Эксцессе кривые, некрасивые и есть необходимость дать юзверю возможность подправить в них запятуйку,...

ASP (SQL)=> Access .. опять баги с округлением?
Проблема следующая: После проведения расчётов на страничке, переменным присваиваются значения с типом Double , затем необходимо обновить...

Опять ошибки: Access denied for user ... (using password: YES)
Привет. Скинул сайт на локальную машину с сервера, на сервере сайт работает, ничего не менял, сайт не мой. Запускаю на локальной выдаёт:...

Опять про импорт данных из Excel в Access
Всем доброго дня! Взываю к помощи, господа программисты! Ситуация такая. Есть у меня База данных в Access по экологии. Все данные заносятся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru