Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Открыть новую тему     Написать ответ в эту тему

Biblbrox



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В таблице тип datetime, код который выгружает вот:

Код:
 
for (i = 2; i <= NumStr; i++)
        {  
         exlCells = exlWorksheet.get_Range("F" + Convert.ToString(i), misValue);
         Plat.Datau = DateTime.FromOADate(exlCells.Value2);
         SQL = "INSERT INTO dbo.Bux ( Num, Datau)" +  "VALUES( '" + Plat.Num + "', " +  
Сonvert.ToString(Plat.Datau.ToOADate()) + ")";
         command1 = new SqlCommand(SQL, connection1);
         command1.Prepare();
         command1.ExecuteNonQuery();
         }
 

 
Я так понимаю в этом случае можно просто вычесть 2 из даты? Чтобы привести их в один вид?

Всего записей: 55 | Зарегистр. 18-05-2004 | Отправлено: 15:43 07-12-2011 | Исправлено: Biblbrox, 15:53 07-12-2011
andrey777k



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый вечер(день),программерши и программисты.
Пишу программы,готовлюсь к олимпиаде по программированию.
 
 
При работе со строками возникла проблема, помогите пожалуйста.Помогите обработать строку  
{"status":0,"id":"4d3606fbf4a34c74ab3239b8580b4d3e-1","hypotheses":[{"utterance":"bla-bla-bla","confidence":0.59976286}]}
 
 
Мне нужно вытащить bla-bla-bla , вот написал код который находит позицию соседних с ним элементов  и вычисляет длину bla-bla-bla Но при попытке скопировать из строки, нужные мне  bla-bla-bla, вылетает ошибка (я наверное неправильно использую функцию CopyTo)
             
Код:
  string s = '{"status":0,"id":"4d3606fbf4a34c74ab3239b8580b4d3e-1","hypotheses":[{"utterance":"bla-bla-bla","confidence":0.59976286}]}'
                string s1, s2, s3, s4;
                char[] s5 = { };
                int a, b, c;
                s3 = "utterance";
                s4 = "confidence";
                a = s.IndexOf(s3);
                b = s.IndexOf(s4);
                c = (b - 3) - (a + 12);
                a = a + 12;
                s.CopyTo(a,s5,1,c); ТУТ ОШИБКА
                richTextBox1.Text = s5.ToString(richTextBox1.Text);
 

Всего записей: 27 | Зарегистр. 19-02-2011 | Отправлено: 22:29 07-12-2011 | Исправлено: andrey777k, 22:50 07-12-2011
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
andrey777k
CopyTo - копирует s в s5, по индексам a,1,c. Так как твоя строка s5 пустая - то и программа матерится.
возможно нужно попробовать substring:
s5 = s.Substring(a,c)

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 07:23 08-12-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Biblbrox

Цитата:
SQL = "INSERT INTO dbo.Bux ( Num, Datau)" +  "VALUES( '" + Plat.Num + "', " +  
Сonvert.ToString(Plat.Datau.ToOADate()) + ")";  

Здесь проще всего всего написать
Код:
SQL = "INSERT INTO dbo.Bux ( Num, Datau)" +  "VALUES( '" + Plat.Num + "', " +  
Plat.Datau.ToString() + ")";  

или так
Код:
SQL = "INSERT INTO dbo.Bux ( Num, Datau)" +  "VALUES( '" + Plat.Num + "', " +  
Plat.Datau.ToString("yyyy-MM-dd HH:mm:ss.FFF") + ")";  
"yyyy-MM-dd HH:mm:ss.FFF" - формат даты. Справку по нему можно посмотреть здесь.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 09:15 08-12-2011
dmitriyku

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как создать динамический массив byte* и указатель на него выдать внешнему приложению?
 
Пишу библиотеку dll на C# (.NET), которая подключается к WIN32-приложению.  
Требуется сформировать нультерминальную однобайтовую строку в .NET-библиотеке и передать WIN32-приложению. Блок памяти надо освободить уже в WIN32-приложении.
 
Проблема в том, что не вижу способа в .NET динамически выделить блок памяти, указатель на который можно было бы отдать наружу.  
 
byte[] arr = new byte[10]; не годится, т.к. это создание динамического массива в куче, он будет уничтожен сборщиком мусора (рано или поздно), после выхода из функции, и я не смогу освободить эту память в WIN32-приложении.
 
byte* arr = stackalloc byte [11]; тоже не годится, т.к. память освободится сразу при выходе из блока, хоть и создается не в куче, а в стеке.
 
 

Всего записей: 87 | Зарегистр. 13-07-2007 | Отправлено: 14:38 08-12-2011
May_Johnson



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dmitriyku
 
Как мне кажется, byte[] arr = new byte[10]; будет работать отлично, потому что куча ведь принадлежит не библиотеке, а процессу.
 
Вы уже пробовали и получили отрицательный результат?
 
Если да то попробуйте перед выдачей сохранить ссылку на этот массив где то в статической переменной, тогда сборщик ее точно не тронет.

Всего записей: 47 | Зарегистр. 10-02-2008 | Отправлено: 04:08 09-12-2011
dmitriyku

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не пробовал, т.к. в учебнике написано, что Сборщик мусора кроме всего занимается оптимизацией кучи, т.е. данные могут в любой момент переехать по другому адресу, а в переменную-указатель запишется новый адрес.
Кроме того, приложение пытается освободить память по указателю после использования, с дотнетом так поступать нельзя, опять же по учебнику.
 
Попробую как будет на практике.
 
А вообще думаю уже копать в другую сторону. Поищу способы межпроцессного взаимодействия, например через сокеты, но это коряво.
 
Добавлено:
Работает.
 
В библиотеке (C#) создал строку string s = "Привет!";
Перекодировал её в windows-1251.
Записал в byte[] с нулем в конце и указатель выдал наружу.
В WIN32-приложении принял как PChar (delphi), перевел в ansistring и отобразил.
Освобождении памяти под PChar засунул в try except.
 
В данном случае сработало, но так делать нельзя.
 
В общем случае надо передавать массивы строк (таблицы) и другие структуры данных (связные списки со строками).
Нет гарантий, что указатели будут указывать куда надо и Сборщик мусора не освободит память до того, как я успею все данные перекачать в дельфийские структуры.

Всего записей: 87 | Зарегистр. 13-07-2007 | Отправлено: 06:26 09-12-2011
Sp44

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую.
 
Имеется задача: сделать приложение с многослойной архитектурой, когда DAL живет на сервере, база данных на другом и клиенты само собой живут на своих машинах. Это WinForms. В программе должны быит датагриды и формы для ввода и редактирования информации. Я сделал коммуникацию по TCP/IP и сериализую/десериализую данные. С объектами, которые используются на формах проблем нет. Они маленькие, а вот с датасетами - вроде как есть. Когда я пересылаю примерно 20к записей - посылка распухает до 10Мб. Для локальной сети 100Мб это не самая большая проблема, но вот что происходит с паматью на клиентской машине при сериализации этих датасетов - достаточно страшно. 100 метров сожрать в порядке вещей. Память само собой потом возвращается, но тем не менее скрипит мозгами устрашающе.
 
Собственно вопрос: как можно пересылать датасеты через сеть чтобы не было тяжолой операции десериализации? Я пробовал как XML сериализацию так и бинарную - разница невелика, только в размере посылки и времени на транспортировку.
 
Используется .Net 4.0 если это интересно (важно) без WCF (по моему мнению там жуткий оверкилл). Одно из требований - клиент должен быть совершенно независим от типа базы данных.
 
Спасибо.

Всего записей: 70 | Зарегистр. 20-09-2006 | Отправлено: 07:27 09-12-2011
dmitriyku

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Связный список передать не получается.

Всего записей: 87 | Зарегистр. 13-07-2007 | Отправлено: 12:08 09-12-2011
May_Johnson



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dmitriyku
 
Наверное вы правы, и решение "в лоб" типа  
return new byte[10];
Далеко не лучший вариант.
 
Мне кажется что лучше будет использовать следующее решение :
1 Реализовать на с++ IStream  
http://msdn.microsoft.com/en-us/library/windows/desktop/aa380034%28v=vs.85%29.aspx
2 Передать ссылку на него в C#
3 Записать вашу строку в поток
 
Таким образом сборщик мусора ничего и знать про эту строку не будет т.к. поток создавала не clr
 
 
Также можно не реализовывать его самостоятельно а использовать  
 

Код:
         
[DllImport("OLE32.DLL")]
static extern int CreateStreamOnHGlobal(int hGlobalMemHandle, bool fDeleteOnRelease, out IStream pOutStm);
 

 

Код:
 
IStream pOutStm = null;
CreateStreamOnHGlobal(0, true, out pOutStm);
 


Всего записей: 47 | Зарегистр. 10-02-2008 | Отправлено: 19:53 09-12-2011 | Исправлено: May_Johnson, 20:00 09-12-2011
dmitriyku

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, сейчас опробую. Честно говоря, уже подумывал об именованных каналах
 
Добавлено:
Через поток данные передаются. Можно считать это приемлемым решением.

Всего записей: 87 | Зарегистр. 13-07-2007 | Отправлено: 07:32 12-12-2011
Terradine

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток, подскажи плз как решить следующую проблемку:
Есть некоторое подобие форума, там  список веток формируется динамически, обсуждения разворачиваются по клику на необходимую ветку, для добавления ответа на эту тему необходимо знать какую именно тему выбрал юзер. Использую метод $.post("Default.aspx", { topic: topic}), отправляет значения по клику на кнопку "запостить"; firebug показывает что параметр действительно отправляется, но на сервере получить этот параметр не получается, пробовал получать методом string extension = Request.Form["topic"]; и в page_load и в обработчике клика по кнопке. Вот блин что не так делаю понять не могу, но приходит всегда null, хотя повторюсь что фаербаг показывает что уходит то что надо, заранее спасибо.

Всего записей: 1 | Зарегистр. 09-12-2011 | Отправлено: 10:33 13-12-2011 | Исправлено: Terradine, 10:38 13-12-2011
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sp44
Я так понимаю у тебя клиент-серверная версия. Если опять же правильно понял тебя, в твоей программе есть серверная часть, которая обрабатывает запросы клиентов.  
Мне непонятно, зачем тебе надо использовать TCP\IP, сериализацию? Написать простой интерфейс - даже через простые датасеты (обычное обращение) - серверная часть уже пусть сама разбирается как и откуда брать данные ...
Еще один момент - так ли нужно передавать 20 тыс записей? не проще дать возможность пользователю настроить фильтр и и выбирать данные согласно условиям пользователя ?

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 08:14 14-12-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Terradine
А так
Код:
string extension = Request["topic"];
?

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 10:05 14-12-2011
Sp44

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BlackVetal
 
Извиняюсь, но я что-то не очень понял как сделать то, что вы предлагаете. Да, мне надо передать содержимое датасета, но через какой механизм его можно передать, если клиент не имеет понятия о том, к какой базе данных идет обращение если вообще идет? Сейчас я дергаю соммуникационный модуль с кодом набора записей напрмер invoices_list с параметром примененного фильтра last3m например. Можете дать краткий пример хотябы на уровне псевдокода плиз или ссылку какую нить?
 
Про 20к записей - это такое требование от заказчика. Дело в том, что программа по умолчанию показывает документы за несколько последних месяцев. Они это активно используют. В общем это бизнес-требование.

Всего записей: 70 | Зарегистр. 20-09-2006 | Отправлено: 12:04 14-12-2011
May_Johnson



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sp44
 
Ну ведь 20К записей не видны пользователю одновременно, сразу отображены навреняка не больше сотни, так что разбейте свои 20К скажем на 10 частей и разбирайте поток по очереди.
 
Взяли первый кусочек потока, десериализовали скажем 2К записей, почистили память с GC.Collect(), взяли сл. кусочек потока, и т.д.

Всего записей: 47 | Зарегистр. 10-02-2008 | Отправлено: 18:59 15-12-2011
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sp44
Извиняюс ... вчера написал ответ ... а отправить забыл ...
Только сейчас понял что вы спрашивали - в тупик поставила фраза о том, что клиент не обязан знать о БД ... НУ да ладно ...
По поводу 20 тыс записей - а так ли заказчику нужны они при начале работы? Требованием, требованием - но зачастую такие требования это возможно недопонимание своей области. Ну ладно, если все же нужны большие объемы, во-первых, обязательно загрузку данных в отдельный поток, во-вторых, загружать кусками - то есть загрузили к примеру 1k записей, как только нужно - подгружаем другую часть, третью и т.д. (в принцепе это уже озвучил May_Johnson)

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 07:22 16-12-2011
Sp44

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BlackVetal и May_Johnson,
 
Спасибо за ваше мнение. Эти блин 20к в добавок ко всему еще и упорядочены по возрастанию, фокус после загрузки переводится на нижнюю строку и при этом отрисовываются агрегированные значения.
 
Вот что я наверное буду делать: внутри посылки буду передавать несколько датасетов по 5к записей в каждом и потом их восстанавливать в один конечный. Расход памяти то идет по нелинейной зависимости и я таким образом смогу сбить нагрузку в ущерб времени. Аможет и уговорю заказчика поменть требования.

Всего записей: 70 | Зарегистр. 20-09-2006 | Отправлено: 09:29 16-12-2011 | Исправлено: Sp44, 09:29 16-12-2011
Macht59

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет.
Не могу найти ошибку...
Прошу помочь тех, кто знаком с криптографией, а в частности с алгоритмом AES.
 
Загвоздка в расширении ключа:
 

Код:
 
//byte Nk = 4;
//byte Nr = 10;
//byte Nb = 4;
//uint[] Rcon = { 0x00000000, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000, 0x1b000000, 0x36000000 };
//byte[] ShiftArray = { 24, 16, 8, 0 };
//byte[] ShiftForSubWord =  { 28, 20, 12, 4 };
//SBox - большая таблица подстановок.
 
public class KeyGenerator
    {
        public KeyGenerator(byte[] key, byte Nk, byte Nr)
        {
            _Nk = Nk;
            _Nr = Nr;
            _w = new uint[_Nr*_Nk + Nb];
            _w = KeyExpansion(key);
        }
         
        private uint[] _w;
        private byte _Nk, _Nr;
        public uint[] GetW
        {
            get
            {
                return _w;
            }
        }
         
        private uint[] KeyExpansion(byte[] key)
        {
            uint temp;
            for (byte i = 0; i < _Nk; i++)
            {
                _w[i] = (uint)(key[i * 4] << 24) | (uint)(key[i * 4 + 1] << 16) |
                    (uint)(key[i * 4 + 2] << 8) | (uint)(key[i * 4 + 3]);
            }
            for (byte i = _Nk; i < _w.Length; i++)
            {
                if (i % _Nk != 0)
                {
                    _w[i] = _w[i - 1] ^ _w[i - _Nk];
                }
                else
                {
                    temp = SubWord(RotWord(_w[i - 1])) ^ Rcon[i / _Nk];
                    _w[i] = (temp) ^ _w[i - _Nk];
                }
            }
            return _w;
        }
        private uint SubWord(uint p)
        {
            uint res = 0;
            for (byte i = 0; i < Const.Nb; i++)
                res |= (uint)(Const.SBox[(p >> ShiftForSubWord[i]) & 0x0f, (p >> Const.ShiftArray[i]) & 0x0f]) << ShiftArray[i];
            return res;
        }
        private uint RotWord(uint w)
        {
            return (w << 8) | (w >> 24);
        }
    }
 

 
Первая ошибка встречается при генерации temp второй раз. А потом все, соответственно наперекосяк.
 
P.S. Проблема решена. Был косяк в таблице подстановок SBox.

Всего записей: 9 | Зарегистр. 17-03-2011 | Отправлено: 04:17 18-12-2011 | Исправлено: Macht59, 11:36 18-12-2011
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sp44
Агрегированные значения для всех 20 тысячь можно посчитать на сервере и передать с рекордсетом.
Юзеру выдать проследние 5 тысячь и перевести на последнюю строку.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:28 18-12-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru