Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Внесение новых данных в БД.


Автор: goodwen053 3.8.2011, 15:30
Здравствуйте, у меня есть база данных подключение и отображение в DataGrid у меня получилось сделать (программа на C#), но у меня не получается вносить новые данные. Вот код, который я использую для подключения и отображения базы данных:
Код

private void Form1_Load(object sender, EventArgs e)
            {

                string catBD = Application.StartupPath + "\\photos database.mdb";
                string conBD = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + catBD + ";Jet OLEDB:Database Password=\"\"";

                OleDbConnection conn = new OleDbConnection(conBD); // создание объекта Connection.
                conn.Open(); // установка соединения с базой данных.
                //к этому моменту у нас есть подключение к БД
                DataSet ds = new DataSet(); // создание объектf DataSet
                OleDbDataAdapter adap = new OleDbDataAdapter("Select * from custom", conn); // создане объекта DataAdapter
                adap.Fill(ds); // Заполнение объекта DataSet.
                conn.Close(); // теперь мы можем закрыть соединение.
                //к этому моменту создана локальная версия БД и прямое соеденение больше не нужно
                DataTable dt = ds.Tables[0]; // извлечение таблицы из объекта DataSet.
                dataGridView1.DataSource = dt; // отображение таблицы в объекте DataGrid
                //к этому моменту таблица отображена на форме
            }

А вот код, полностью, где я пытаюсь внести новые данные в таблицу:
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
            string catBD = Application.StartupPath + "\\photos database.mdb";
            string conBD = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + catBD + ";Jet OLEDB:Database Password=\"\"";
 
            OleDbConnection conn = new OleDbConnection(conBD); // создание объекта Connection.
            conn.Open(); // установка соединения с базой данных.
            //к этому моменту у нас есть подключение к БД
            DataSet ds = new DataSet(); // создание объектf DataSet
            OleDbDataAdapter adap = new OleDbDataAdapter("Select * from custom", conn); // создане объекта DataAdapter
 
            /*Создание объекта OleDbCommandBuilder - оболочки объекта DataAdapter, поддерживающей 
             динамическое генерирование команд обновления, добавления и удаления данных. */
            OleDbCommandBuilder bldr = new OleDbCommandBuilder(adap); 
 
            adap.Fill(ds); // Заполнение объекта DataSet.
            conn.Close(); // теперь мы можем закрыть соединение.
            //к этому моменту создана локальная версия БД и прямое соеденение больше не нужно
            DataTable dt = ds.Tables["Table"]; // извлечение таблицы из объекта DataSet.
            dataGridView1.DataSource = dt; // отображение таблицы в объекте DataGrid
            //к этому моменту таблица отображена на форме
 
            //внесение новых записей
            dt = ds.Tables["custom"];
            DataRow drCurrent = dt.NewRow();
 
            drCurrent["№"] = "4";
            drCurrent["FIO"] = "Сидоров";
            drCurrent["address"] = "Ул. Дугина 8";
            drCurrent["(tele)phone number"] = "800 226-0752";
            drCurrent["order status"] = "Обработан";
            drCurrent["data"] = "23.12.12";
 
            dt.Rows.Add(drCurrent);
            
            // Сохранение изменений в базе данных, 
            conn.Open();
            adap.Update(ds);
            conn.Close();
        }
    }
}

В общем компилятор ни каких ошибок не выдаёт, но и данные не вносятся, мне сказали, что обновления не происходят потому что нет запроса на обновление. Как мне это сделать, какие строки кода добавить, или изменить? И как можно вносить данные с помощью DataGrid?

А так же хочу, чтобы подключение и создание всех объектов (dataset, dataadapter) были созданы в Form_Load, а уже внесение новых данных в другой процедуре, через кнопку, когда пишу вот так:
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
            string catBD = Application.StartupPath + "\\photos database.mdb";
            string conBD = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + catBD + ";Jet OLEDB:Database Password=\"\"";
 
            OleDbConnection conn = new OleDbConnection(conBD); // создание объекта Connection.
            conn.Open(); // установка соединения с базой данных.
            //к этому моменту у нас есть подключение к БД
            DataSet ds = new DataSet(); // создание объектf DataSet
            OleDbDataAdapter adap = new OleDbDataAdapter("Select * from custom", conn); // создане объекта DataAdapter
 
            /*Создание объекта OleDbCommandBuilder - оболочки объекта DataAdapter, поддерживающей 
             динамическое генерирование команд обновления, добавления и удаления данных. */
            OleDbCommandBuilder bldr = new OleDbCommandBuilder(adap); 
 
            adap.Fill(ds); // Заполнение объекта DataSet.
            conn.Close(); // теперь мы можем закрыть соединение.
            //к этому моменту создана локальная версия БД и прямое соеденение больше не нужно
            DataTable dt = ds.Tables["Table"]; // извлечение таблицы из объекта DataSet.
            dataGridView1.DataSource = dt; // отображение таблицы в объекте DataGrid
            //к этому моменту таблица отображена на форме
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //внесение новых записей
            dt = ds.Tables["custom"];
            DataRow drCurrent = dt.NewRow();
 
            drCurrent["№"] = "4";
            drCurrent["FIO"] = "Сидоров";
            drCurrent["address"] = "Ул. Дугина 8";
            drCurrent["(tele)phone number"] = "800 226-0752";
            drCurrent["order status"] = "Обработан";
            drCurrent["data"] = "23.12.12";
 
            dt.Rows.Add(drCurrent);
 
            // Сохранение изменений в базе данных, 
            conn.Open();
            adap.Update(ds);
            conn.Close();
        }
    }
}

Но все объекты conn, adap и так далее уже не видны в другой процедуре, как мне сделать, чтобы были видны?

Автор: goodwen053 6.8.2011, 13:16
Прошу помочь.

Автор: WarHog 6.8.2011, 21:35
Цитата

Обновления не происходят потому что нет запроса на обновление. 

Что происходит при выполнении такого кода?
Код

bldr.GetUpdateCommand().CommandText


Цитата

Но все объекты conn, adap и так далее уже не видны в другой процедуре, как мне сделать, чтобы были видны?

Не выполняй запросы внутри обработчиков, сделай отдельный компонент, который этим занимается и нужные объекты определи как приватные поля класса, а нужный тебе функционал определи в методах этого класса.

Автор: Doss 17.10.2011, 18:20
Ответ на добавление:
 
Код

using (OleDbConnection connection = new OleDbConnection(connect))
            {
                OleDbCommand command = new OleDbCommand(
                "INSERT into Imeg(im,Pid) Values(@im,@Pid)", connection);
                command.Parameters.Add("@im", OleDbType .LongVarBinary, photo.Length).Value = photo;
                command.Parameters.Add("@Pid", OleDbType.VarChar).Value = "Привет";
                connection.Open();
                command.ExecuteNonQuery();
               
            }


или

Код

  using (OleDbConnection conn = new OleDbConnection(connect))
            {
                try
                {
                    conn.Open();
                    //------------------------------------------------

                    //Соединение с БД и вывод 
                    da = new OleDbDataAdapter("INSERT into МаркиАвто(Марка)Values('" + GettxtName + "')", conn);
                    DataSet ds = new DataSet();
                    da.Fill(ds, "Марка");
                    try
                    {
                        ds.AcceptChanges();
                    }
                    catch (SqlException ex)
                    {
                        MessageBox.Show(ex.Message, ex.Source);
                    }

                    //------------------------------------------------
                 
                    conn.Close();
                    ds.Dispose();
                    LoadBase();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message, ex.Source);
                    conn.Close();
                }
            }


вот изменить
Код

 using (OleDbConnection conn = new OleDbConnection(connect))
            {
                try
                {
                    conn.Open();
                    da = new OleDbDataAdapter("UPDATE МаркиАвто set Марка='" + GettxtName + "' where id=" + selRow["id"] + "", conn);
                    DataSet ds = new DataSet();
                    da.Fill(ds, "Марка");
                    try
                    {
                        ds.AcceptChanges();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, ex.Source);

                    }

                    conn.Close();
                    ds.Dispose();
                    LoadBase();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message, ex.Source);
                    conn.Close();
                }
            }


вот удалить

Код

 using (OleDbConnection conn = new OleDbConnection(connect))
            {
                try
                {
                    conn.Open();
                    //----------------------------------------
                    da = new OleDbDataAdapter("Delete * from МаркиАвто Where id=" + selRow["id"] + "", conn);
                    DataSet ds = new DataSet();
                    da.Fill(ds, "МаркиАвто");
                    try
                    {
                        ds.AcceptChanges();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, ex.Source);

                    }

                    conn.Close();
                    ds.Dispose();
                    LoadBase();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message, ex.Source);
                    conn.Close();
                }
            }


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)