Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: fvgrod
Дата сообщения: 24.03.2008 10:57
BaluBig
а почему не работает функция (выше писал текст всего кода):
a:
if (Sql.Base.bool_AllDelete != true)
{
Thread.Sleep(1000);
goto a;
}

а как увеличить время таймаута? операцию дробить ни как не получиться((
Автор: BaluBig
Дата сообщения: 24.03.2008 20:02
fvgrod

Цитата:
а почему не работает функция

Потому что выполнение SQL-команд у нас синхронное по умолчанию. И управление на метку a: попадет только тогда, когда закончится выполнение myCommand.ExecuteNonQuery();


Цитата:
а как увеличить время таймаута?

SqlCommand.CommandTimeout, по умолчанию там 30 секунд.


Цитата:
операцию дробить ни как не получиться((

Не верю. Записи в таблице должны иметь первичный ключ (primary key). В качестве такого ключа часто используется некое автоинкрементное поле (с признаком identity). Если поля такого нет - его можно создать. Когда поле есть, ничего не мешает удалять кусками опираясь на значение ключа.
Предположим, что поле называется ID. Тогда мы можем последовательно выполнять запросы:
Код:
begin tran
delete from [mail] where id between 0 and 100
commit tran
...
begin tran
delete from [mail] where id between 101 and 200
commit tran
...
Автор: SOFF
Дата сообщения: 26.03.2008 01:04
fvgrod
создай в БД сохраненную процедуру
CREATE PROCEDURE DeleteMail
BEGIN
TRUNCATE [mail]
END

затем в коде меняешь:
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.CommandText = "DeleteMail";

и усё... за 2 сек хоть миллион строк удалить.
Автор: Viverra
Дата сообщения: 26.03.2008 13:39

Цитата:
И все равно вылетает ошибка при долгом копировании таблиц с выборкой или импотрировании данных из текстового файла:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

а вообще хоть какие-то операции получается с базой проделать? делаешь все внутри одного соединения? Пропиши в ConnectionString += ";timeout=<много>".

SOFF

Цитата:
создай в БД сохраненную процедуру TRUNCATE

TRUNCATE обсуждалcя выше, а хранимая процедура будет не быстрей, чем послать тот же Sql текстом.
Автор: V0lt
Дата сообщения: 27.03.2008 06:51
вопросы по преобразованию данных

1. имею массив byte[4] m и число uint k. Как присвоить k=m[]?

2. массив byte[10] m и число uint k. k=m[2,5]?

3. uint k, byte n. Как присвоить n = (3 байт 4-xбайтного k )? Тут я думал про битовые сдвиги, но может еще чего есть...
Автор: BaluBig
Дата сообщения: 27.03.2008 16:13
V0lt
Если не пугат небезопасный код, то можно так:

Код:
class Program
{
static void Main(string[] args)
{
Copy();
Console.WriteLine(k); // -> 65535
}

static uint k;
static byte[] m = new byte[] { 0xFF, 0xFF, 0, 0 };

static unsafe void Copy()
{
fixed (uint* ptr = &k)
{
Marshal.Copy(m, 0, (IntPtr)ptr, 4);
}
}
}
Автор: Mike13x13
Дата сообщения: 28.03.2008 12:58
Имеется задача: мониторить систему на появление нового девайса (накопитель, к примеру, флэшка), при обнаружении слить с него определенную инфу. Раньше такого не делал, но думал, что это задача часто встречающаяся и найти в инете инфу будет легко. Но вот уже пару часов рою, ничего толком не нарыл. Может плохо рою? Принцип понятен - в теневом потоке перехватывать соответствующее системное сообщение. Может кто и реализацию подскажет?
Автор: TeXpert
Дата сообщения: 28.03.2008 13:15
Mike13x13
Это лучше делать средствами WinAPI: например, обрабатывать широковещательное системное сообщение WM_DEVICECHANGED. И твой принцип как раз непонятен:
Цитата:
Принцип понятен - в теневом потоке перехватывать соответствующее системное сообщение
Собственно, зачем тут теневой поток, и зачем тут перехват? Уведомление рассылается и так, "бесплатно".
Автор: jONES1979
Дата сообщения: 29.03.2008 11:50
Mike13x13
точно такая же задача пару месяцев назад разжовывалась в журнале хакер. Ищи на их сайте
Автор: BaluBig
Дата сообщения: 29.03.2008 13:03
Mike13x13
Для обработки сообщений windows (в частности WM_DEVICECHANGED) городить огород в виде отдельного потока не нужно. Можно либо переопределить protected-метод WndProc главной формы приложения либо установить фильтр сообщений приложения (ключевые слова Application.AddMessageFilter, IMessageFilter). Дальше MSDN в помощь
Автор: Lihonosov
Дата сообщения: 31.03.2008 11:17
Mike13x13
Может подойдет.
Когда-то была у меня идея написать программу, которая бы мониторила запуск ехе файлов. Думал про всякие HOOK, но в итоге все довольно просто получилось с помощью Перехват ShellExecuteEx в .NET.
Еще помогла эта статья.
Удачи!
Автор: Mike13x13
Дата сообщения: 01.04.2008 10:26
BaluBig Спасибо за совет, так и попробую.
TeXpert
Извиняюсь, неправильно выразился, не столько "перехватывать", сколько "прослушивать" . Ну а теневой поток - поскольку прога должна делать еще кое-что на "переднем плане", а мониторить тоже должна (и постоянно), то я и подумал, что без дополнительного потока выполнения не обойтись. Спасибо
jONES1979 Спасибо, поищу.
Lihonosov Отдельное спасибо за ссылки.
Автор: Mike13x13
Дата сообщения: 02.04.2008 21:07
Еще раз спасибо за советы, в принципе, помогли . На путь натолкнула как раз статья в хакере. К сожалению WM_DEVICECHANGED не срабатывает на флешку, нарыл другую - GetlogicalDrives(), есть в состеве .Net, подход, правда, тут другой. Делать таки пришлось в потоке на бекграунде. Но главное - проблема решена, заказчик должен быть доволен
Автор: Lihonosov
Дата сообщения: 03.04.2008 09:20
Mike13x13

Цитата:
На путь натолкнула как раз статья в хакере.

Напиши ссылку на статью.
Автор: Mike13x13
Дата сообщения: 03.04.2008 11:47
Lihonosov
Предательский антивирус: тырим данные с flash-модулей и CD/DVD
Автор: geeees
Дата сообщения: 12.04.2008 07:45
помогите вообще запутался. Есть dataGridView, подключенный к dataset. Нужно чтобы вводимые в ячейки данные попадали в dataset. Как я понял dataGridView находится не в виртуальном режиме?
Автор: Lihonosov
Дата сообщения: 12.04.2008 11:33
geeees
Ну так если dataGridView связан с dataset, то если ты изменяешь какие-то данные в dataGridView, то они автоматически меняются и в dataset. Потом вызываешь метод Update() и изменения зафиксируются в базе данных, если конечно не будет нарушена целостность данных.
Тут обсуждали, что-то подобное
http://forum.ru-board.com/topic.cgi?forum=33&topic=3706&start=500
Автор: geeees
Дата сообщения: 12.04.2008 21:44
при отладке на adapter1.Update(dataSet1) появляется это - Update requires a valid InsertCommand when passed DataRow collection with new rows.
при чём тут InsertCommand то, нужно же просто вставлять новые данные из datagrid ? Извините за ламерский вопрос конечно((
Автор: Eleneveria
Дата сообщения: 13.04.2008 00:58
Извините, что встреваю со своей проблемой. Но может быть кто-нибудь сталкивался с такой проблемой, может предложить что-нибудь.
Есть Visual Studio 2005, Vista Home Edition, создается web-site. В принципе, при debug, в окне Internet Explorer загружаются страницы, все работало. Но теперь при попытке просмотреть страничку Explorer выдает сообщение, что "не может отобразить данную веб-страницу", просмотрела прошлые проекты, такой же результат, диагностика ошибок подключения выдала результат, что "неполадки поключения не обнаружены" . Ни в какие настройки не влезала, не изменяла. Единственные действия - за это время был установлен нод32 антивирус, и виста скачала себе обновления и установила их. Все. Есть какие-нибудь мысли по этому поводу?
Заранее благодарна
Автор: BaluBig
Дата сообщения: 13.04.2008 10:49
Eleneveria
Напрашивается отключение NOD32, по крайней мере той его части, которая называется, кажется, web-antivirus.
Автор: Eleneveria
Дата сообщения: 13.04.2008 20:17
BaluBig, спасибо, что откликнулись.
Все заработало после того, как пришлось полностью удалить нод32, хотя ранее стояла другая его версия и все было нормально. В общем спасибо вопрос исчерпан.
Автор: Mike13x13
Дата сообщения: 14.04.2008 16:41
geeees
Результат вполне закономерен - если ты хочешь использовать дата адаптер не только для заливки дата сет, но и для апдейта источника для дата сет, то должен правильно определить команды вставки и апдейта (insert into table..., update table....) источника, иначе пахать не будет. Заходишь в датасет дизайнер и смотришь свойства соответствующего адаптера - это если делал его в дизайнере. Если вручную - пишешь, естественно, это все вручную.

Кстати, вопрос ко всем - юзаю студию 2008 про, регулярно слетают определения дататейблов (untyped, но сделанных в дизайнере, т.е. в дизайнере просто создал определение этих тейблов, дальше вся работа производится вручную). Уже за..ся их востанавливать. Никто не сталкивался? Может кто знает лекарство?
Автор: BaluBig
Дата сообщения: 14.04.2008 20:31
Mike13x13

Цитата:
юзаю студию 2008 про, регулярно слетают определения дататейблов
Ни разу не слетало...
Автор: geeees
Дата сообщения: 14.04.2008 21:29
Mike13x13
Спасибо. Буду разбираться.
Автор: geeees
Дата сообщения: 15.04.2008 23:48
Опять нужна помощь(( Не могу понять как обновлять БД. Тут либо совсем всё не правильно либо я не правильно делаю Parameters.AddWithValue. Что то нигде не могу найти описание как правильно работать с datagridview.

connection.Open();
DataTable sex = new DataTable();
SqlDataAdapter rt = new SqlDataAdapter();
SqlCommand UpdateComm = new SqlCommand();
table2 = dataSet1.Tables[0].GetChanges(DataRowState.Added);
dataGridView1.Rows.GetRowState(0);
UpdateComm.Parameters.AddWithValue("@param", table2.Rows.ToString());
string sqlUpdate = "INSERT INTO[Продукция]" + "()VALUES " + "(@param)";
UpdateComm.CommandText = sqlUpdate;
UpdateComm.Connection = connection;
rt.InsertCommand = UpdateComm;
rt.InsertCommand.ExecuteNonQuery();
rt.Update(dataSet1);
Автор: BaluBig
Дата сообщения: 16.04.2008 08:44
geeees

Цитата:
Не могу понять как обновлять БД.
А читать MSDN стало не модно? http://msdn2.microsoft.com/en-us/library/33y2221y.aspx
Автор: geeees
Дата сообщения: 17.04.2008 00:02
BaluBig?спасибо.
Млин до меня вот это долго доходило))) :
SqlCommandBuilder sqlinsert = new SqlCommandBuilder(adapter1);
adapter1.InsertCommand = sqlinsert.GetInsertCommand();
adapter1.Update(dataSet1);
Автор: Yakon
Дата сообщения: 17.04.2008 18:37
Пишу прогу на Visual Basic 2005.
Задача читать логи одной программы.
Эта программа с момента запуска держит файл всегда открытым на запись.
Получилось читать используя конструкцию
Dim FileStream As New FileStream("c:\logs.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Dim buffer(1024) As Byte
Dim bytesRead As Integer
Dim txt As String = ""
While True
bytesRead = FileStream.Read(buffer, 0, buffer.Length)
If bytesRead = 0 Then
Exit While
End If
txt = txt & System.Text.Encoding.ASCII.GetString(buffer)
End While
FileStream.Close()
Но при этом в txt оказываются обрывки логов. Хотя при открытии файла в блокноте там видны целые записи.
Как правильно читать лог, чтоб в txt он оказывался только после окончания записи очередной строки в лог?
Ещё ньюанс. При моем способе, если я читаю логи в txt, то там строка обрывается на каком-то месте. И при открытии этого же файла в блокноте, там мало того что строки целые, так их больше, чем в txt. То есть в txt попадают не все строки присутствующие в файле логов на данный момент.
Автор: helgi
Дата сообщения: 17.04.2008 23:20
Yakon
Для того, чтобы в тхт оказывались полные строки из лога есть смысл навесить на каталог обработчик события изменения/модификации файлов в директории - FileSystemWatcher. Цитата из MSDN - "Listens to the file system change notifications and raises events when a directory, or file in a directory, changes". И обработать событие Changed.
Автор: Yakon
Дата сообщения: 18.04.2008 08:33
Проблема в том, что программа держит постоянно файл отрытым на запись.
Поэтому объём файла растёт, при открытии блокнотом я вижу появление новых строк,
а время изменения файла не меняется до остановки программы, пищущей логи. Соответственно FileSystemWatcher бесконечно ждет наступления события, а Dim FileStream As New FileStream("c:\logs.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite), запущенное без наступления события изменения файла, выводит в переменную обрывающийся в конце лог. Нельзя ли как-то извне заставить другую программу сбросить все изменения файла на диск. Так как новая запись вносится с переодичность 20-30секунд, но FileStream почему-то никогда не загружает целый лог.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.