Member 12931315 Ответов: 1

Как узнать, существует ли запись перед повторной записью


Я пытаюсь преобразовать текстовый файл, прочитать текстовый файл и загрузить
их к переменным.

теперь я хочу посмотреть, существует ли запись, прежде чем снова писать

Правильно ли это см. Запись выхода
DataRow [] foundrow;
foundRows = это.timeattDataSet.табличные данные"].Выберите ("Token_no= @cToken and Date = @datetime and Time = @cTime");

Аджит

(Я новичок в c#)

Что я уже пробовал:

Token1 = str.ToString().Substring(0, 9).Trim();
cToken2 = '5' + cToken1.PadLeft(5, '0');
cToken = cToken2.Substring(0, 6);
cDate = str.ToString().Substring(10, 10);
cTime = str.ToString().Substring(21, 2) + str.ToString().Substring(24, 2);
cIdno = str.ToString().Substring(30, 1);
datetime = Convert.ToDateTime(cDate);

DataRow[] foundRows;
foundRows = this.timeattDataSet.Tables["Data"].Select("Token_no= @cToken and Date = @datetime and Time = @cTime");

Michael_Davies

Вы должны построить свой Select SQL с данными для встроенных параметров, ваш существующий запрос использует имена параметров (@cToken и т. д.), И нет никакого способа передать значения параметров в таблицу.Выбрать. Это нормально для таблицы в памяти, так как она не подвержена SQL-инъекциям и никогда не будет использоваться для запросов к SQL server по команде.

Пример;

. Выберите ("Token_no='"+ cToken + "' и дата = ... и т. д.

Примечание: как и выше, вам также придется заключать данные параметров в одинарные кавычки для строковых полей.

1 Ответов

Рейтинг:
8

Richard Deeming

использовать LINQ:

bool rowExists = timeattDataSet.Tables["Data"].AsEnumerable()
    .Any(row => string.Equals(row.Field<string>("Token_no"), cToken, StringComparison.OrdinalIgnoreCase) && row.Field<DateTime>("Date") == datetime);


Member 12931315

Привет Ричард
Большое спасибо Ричард это работает
единственная проблема заключается в том, что он позволяет записать несколько записей в цикле while и
дайте break error какую-нибудь идею, почему это так ?

Спасибо снова

Аджит

Richard Deeming

В чем же ошибка?

Member 12931315

Помощник по управляемой отладке «ContextSwitchDeadlock»: «Среде CLR не удалось перейти из контекста COM 0x1801160 в контекст COM 0x18010a8 в течение 60 секунд. Поток, которому принадлежит целевой контекст / квартира, скорее всего, либо выполняет ожидание без перекачки, либо обрабатывает очень длительную операцию без перекачки сообщений Windows. Эта ситуация обычно оказывает негативное влияние на производительность и может даже привести к тому, что приложение перестает отвечать или использование памяти постоянно накапливается с течением времени. Чтобы избежать этой проблемы, все потоки однопоточного подразделения (STA) должны использовать примитивы ожидания перекачки (такие как CoWaitForMultipleHandles) и регулярно перекачивать сообщения во время длительных операций ».

Richard Deeming

Эта ошибка, похоже, не связана с кодом, который вы опубликовали.

Member 12931315

Привет надеюсь, список ошибок не так уж и длинен.
без проверки существования строки я могу написать более 30000 записей
с проверкой только 109 записей написано и сломано

Заранее спасибо

Аджит

Member 12931315

пока! нулевой

foundRows = это.timeattDataSet.табличные данные"].Выберите ("Token_no= @cToken and Date = @datetime and Time = @cTime");


если найденыши = = ложь
"запись в файл данных"

Member 12931315

Теперь я нашел это приложение в режиме перерыва, есть опция с просьбой продолжить
Я нажимаю, и он работает, это проблема visual studio ?

Аджит

Richard Deeming

Да, вероятно, это просто Visual Studio предупреждает Вас, что ваш код занимает много времени.