Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Цикл посточного чтения, вывода,записи в БД С# ....  (Прочитано 17410 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Линдси
Интересующийся

ru
Offline Offline

« : 12-10-2010 11:48 » 

Теперь конкретнее.... Есть датагрид, есть access и мускул....и студия 10я.... Мне нужно  цикличную построчную выборку из табл аксесс и построчную запись в мускул(в цикле)...
с построчным же выводом в датагрид(в цикле)... если есть киньте код, если нет то обьясните пожалуйста подробно, приблизительно я знаю)))
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 12-10-2010 13:23 » 

Линдси, сначала объясни, что ты знаешь приблизительно.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Линдси
Интересующийся

ru
Offline Offline

« Ответ #2 : 13-10-2010 06:58 » 

Знаю  insert  параметризированный,  для отображение и сохранение таблицы, 
DataSet ds = new DataSet();
потом  используется адаптер,
селектуомманд ....  адаптер Fill , читает набор данных  из  датасет, дальше
программно привязываешь  DataSourse к таблице, и как-то также для выборки только используя датаридер,
Но синтаксис цикл построчный, у меня не выходит, да и выборка, в принципе тоже...

Добавлено через 59 секунд:
Ну ещё для сохранения прописывается... da.Update();
« Последнее редактирование: 13-10-2010 06:59 от Линдси » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 13-10-2010 18:38 » 

Линдси, ну раз ты знаешь DataReader, то знаешь и ответ на вопрос. Именно DataReader читает данные последовательно запись за записью.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Линдси
Интересующийся

ru
Offline Offline

« Ответ #4 : 15-10-2010 06:51 » 

А как сохранять в таблицу?)

Добавлено через 6 минут и 56 секунд:
из одной в другую)
« Последнее редактирование: 15-10-2010 06:58 от Линдси » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 15-10-2010 10:43 » 

Линдси, добавить в DataTable строчки или изменить значения полей в существующих строчках. Удалить ненужные строчки. Затем для DataAdapter определить update, insert и delete команды и вызвать метод Update.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Линдси
Интересующийся

ru
Offline Offline

« Ответ #6 : 19-10-2010 10:04 » 

Хм,может проблема вообще в другом, как реализовать подключение двух БД, чтобы это делать или мне ....Сначало соеденение с одной БД, формировать таблицу в датасет, а потом в соеденнение с другой БД, читать и запиывать из датасет в другой датасет, а потом уже сохранять в таблицу))

Добавлено через 9 секунд:
?
« Последнее редактирование: 19-10-2010 10:04 от Линдси » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 19-10-2010 12:18 » 

Линдси, ну что значит как? Можно в цикле читать из одной и писать в другую. Вроде бы у DataSet и DataTable был ещё метод Merge, который позволяет "слить" две одинаковых структуры с разными данными в одну с общими данными.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Линдси
Интересующийся

ru
Offline Offline

« Ответ #8 : 20-10-2010 09:01 » 

У access не общая структура с мускулом) И мне не просто залить  данные у меня обновление  данных)) Эти записи будут добавляться бесконечно и если мне их каждый раз  обьеденять , рехнуться можно, ДатаСет не наследуемый тип как выяснилось,  так что провернуть финт я не могу)
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 20-10-2010 10:44 » 

Линдси, если структура копируемой таблицы известна, то оставь всякие датасеты - считывай построчно из Access и отдельным подключением к MySQL посредством запроса INSERT вставляй эти данные в целевую таблицу.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Линдси
Интересующийся

ru
Offline Offline

« Ответ #10 : 21-10-2010 10:39 » 

Код:
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
using MySql.Data.Types;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            MySqlConnection cn = new MySqlConnection(@"Server = localhost ;
            Database = vant;

            UserID = root;
            Password = 12;");}
       

           

public void InsertRow(string myCon)
{
// If the connection string is empty, use a default.
if(myCon == "")
{
    myCon = (@"Server = localhost ;Database = vantage;UserID = root; Password = 12");
}


MySqlConnection myConnect = new MySqlConnection(myCon);
MySqlTransaction trans = myConnect.BeginTransaction();

            //INSERT         
            string inssq  = "SELECT (insert into dtb4.dbo.vantage (nam) values(@nam)) FROM dtb2.dbo.vant ";
MySqlCommand cmd = new MySqlCommand(inssq);

cmd.Parameters.AddWithValue("nam", @"nam");
cmd.Parameters["nam"].Value = @"nam";

cmd.Connection = myConnect;
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
         
//Испольуем метод CreateCommand для создания команды
            cmd = myConnect.CreateCommand();
            cmd.Transaction = myConnect.BeginTransaction();
            cmd.CommandText = "select * from dtb4";
            MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

            //чтение данных
            while (rdr.Read())
            {
                string tmp = "";
                for (int i = 0; i < rdr.FieldCount - 1; i++)
                {
                    if (tmp != "") tmp += "\t";
                    tmp += rdr[i];
                }

                Console.WriteLine(tmp);
                Console.Read();
               
            }

            rdr.Close();
            myConnect.Close();
        }



        }
    }

Вопрос... Неувязка с датаридером,  он выводит первую таблицу, но вторую игнорирует, даже если присобачить тот что выше) ....Предложения , комментарии?))...Поправка похоже дело в инсёрте, эта сволочь не передаёт данные, сейчас между мускулом, но эт у меня аксеса под рукой нет)
« Последнее редактирование: 21-10-2010 12:18 от Линдси » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 22-10-2010 14:19 » 

Цитата: Линдси
SELECT (insert into dtb4.dbo.vantage (nam) values(@nam)) FROM dtb2.dbo.vant
Я не знаю, является ли это корректным для MySQL, но в стандартном SQL такая инструкция недопустима.

Что ты хочешь сделать этой командой?

Цитата: Линдси
MySqlCommand cmd = new MySqlCommand(inssq);
...
cmd = myConnect.CreateCommand();
Используется одна и та же переменная. Первая команда, выполнив ExecuteNonQuery, ничего не возвращает. Когда присваивается вторая команда, первая команда теряется. Вторая команда выполняет запрос
Цитата: Линдси
select * from dtb4
Это одна таблица. Где ты ожидаешь увидеть вторую таблицу?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Линдси
Интересующийся

ru
Offline Offline

« Ответ #12 : 29-10-2010 12:52 » new

Дошло....Вот как, но  опять возник вопрос , как прописать запрос что бы из перрвой базы данные передовались лишь те которых не хватает во второй, как-то через max(dat)... но я без понятия как).


Код:
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 MySql.Data;
using MySql.Data.MySqlClient;
using MySql.Data.Types;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        MySqlConnection cn = new MySqlConnection(@"Server = localhost ;
            Database = vant;

            UserID = root;
            Password = 12;");
        MySqlConnection cn2 = new MySqlConnection(@"Server = localhost ;
            Database = vantage;
            UserID = root;
            Password = 12;");

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
         
            cn.Open();
            cn2.Open();
            //1
            MySqlCommand cmd = new MySqlCommand();
            cmd = cn.CreateCommand();
            cmd.CommandText = "select * from dtb2";
            MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            //2
            MySqlCommand cmd2 = new MySqlCommand();
            cmd2 = cn2.CreateCommand();
            cmd2.CommandText = "insert into dtb4 (nam,dat) values(@nam,@dat)   ";
            //cmd2.Parameters.AddWithValue("nam", "@nam");
            cmd2.Parameters.Add("@nam", MySqlDbType.Text, 255, "nam");
            cmd2.Parameters.Add("@dat", MySqlDbType.DateTime, 12, "dat");
            //cmd2.Parameters["@nam"].Direction = ParameterDirection.Input;
            //cmd2.Parameters["@dat"].Direction = ParameterDirection.Input;


            while (rdr.Read())
            {

                cmd2.Parameters["@nam"].Value = rdr[1].ToString();
                cmd2.Parameters["@dat"].Value = System.DateTime.Now;
                cmd2.ExecuteNonQuery();
                string tmp = "";
                for (int i = 0; i < rdr.FieldCount - 1; i++)
                {
                    if (tmp != "") tmp += "\t";
                    tmp += rdr[i].ToString();
                }

                string sql = @"SELECT * FROM dtb4";
                MySqlDataAdapter da = new MySqlDataAdapter(sql, cn2);
                DataSet ds = new DataSet("dtb4");

                da.Fill(ds, "dtb4");
                dataGridView1.DataSource = ds.Tables["dtb4"];

            }

            rdr.Close();
            cn.Close();
            cn2.Close();

           

        }

        private void button2_Click(object sender, EventArgs e)
        {
           
           
        }
    }
}



Добавлено через 53 минуты и 14 секунд:
О и кинтье пожалуйста какую-нить ссылку на пример с ProgressivBar, только Шилдта не упоминайте ради бога))
« Последнее редактирование: 29-10-2010 13:45 от Линдси » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines