Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача DataTable клиенту

59K
02 января 2012 года
TVR1623
9 / / 04.12.2010
Помогите плиз разобраться с клиент-серверным приложением. Сервер получает SQL запрос от клиента через сокет, затем этот запрос помещается в OleDbDataAdapter и результат выводится в datagridview. Затем мне нужно передать таблицу хранящуюся в datagridview через сокет клиенту и там вывести.
Сервер:
Код:
IPHostEntry ipHost = Dns.Resolve("localhost");
            IPAddress ipAdr = ipHost.AddressList[0];
            IPEndPoint ipEnd = new IPEndPoint(ipAdr, 11000);
            Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //назначение сокета
                sListener.Bind(ipEnd);
                sListener.Listen(10);
                //начинаем слушать соединения
                while (true)
                {
                    Socket handler = sListener.Accept();
                    string sql = null;
                    //дождались клиента который хочет соеденится
                    while (true)
                    {
                        byte[] bytes = new byte[1024];
                        int s = handler.Receive(bytes);
                        sql += Encoding.ASCII.GetString(bytes, 0, s);
                        OleDbDataAdapter DA = new OleDbDataAdapter(sql);
                        DataTable DT = new DataTable("Tovar");
                        DA.Fill(DT);
                        datagridview.DataSource = DT;
                        //отправка таблицы
                       byte[] tabl = Encoding.ASCII.GetBytes(DT);
                        handler.Send(tabl);
                    }
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();

При компилировании выдает такие ошибки:
cannot convert from 'string' to 'System.Data.OleDb.OleDbCommand'
cannot convert from 'System.Data.DataTable' to 'char[]'
20K
02 января 2012 года
sem2711
124 / / 23.09.2009
Если конкретно по ошибкам, то первая возникает судя по всему в строке инициализации DA: конструктор, принимающий единственный параметр, ожидает тип OleDBCommand, а вы передаете String. Либо используйте другой конструктор (например, с двумя параметрами типа String), либо создайте экземпляр класса OleDBCommand и передавайте его. Вторая ошибка вытекает из более глобального вопроса: вы пытаетесь передать объект класса DataTable через сокет побайтно? Сразу хочу сказать - этот подход не сработает. В .NET существует такая вещь, как сериализация. В вашем случае возможно удобнее будет воспользоваться методом WriteXml и классом NetworkStream, но может быть есть и более элегантные решения, применимые именно в такой ситуации.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог