У меня не было удачи с помощью BinaryFormatter, я предполагаю, что у меня должна быть полная структура, которая соответствует содержанию файла точно. Я понял, что в конце не интересовался многим содержания файла так или иначе, таким образом, я пошел с решением чтения части потока в bytebuffer и затем преобразование его с помощью
Encoding.ASCII.GetString()
для строк и
BitConverter.ToInt32()
для целых чисел.
я должен буду быть в состоянии проанализировать больше файла позже, но для этой версии мне сошли с рук просто несколько строк кода.
Что ж, после некоторых разговоров с очень полезным представителем службы поддержки от Microsoft мы наконец пришли к источнику проблемы. И, к сожалению, я не предоставил достаточно информации в моем исходном сообщении, чтобы кто-либо из присутствующих на SO мог принять решение, поэтому приношу свои извинения в этом отношении.
Вот в чем проблема - как часть кода, который создает рассматриваемый запрос LINQ, я объявил переменную .Net следующим образом:
Dim RadCvtFactor As Decimal = Math.PI / 180
Оказывается, когда это передается в SQL, объявление параметра, как видно из файла журнала LINQ, является DECIMAL (29, 4). Из-за значения масштаба в объявлении в СУБД передается недопустимое значение, что приводит к странной разнице в результатах запроса.
Объявление переменной .Net как одиночного значения, например:
Dim RadCvtFactor As Single = Math.PI / 180
полностью устраняет проблему .
Единственная вещь, которая сразу приходит в голову, - это проблема разрешения. Возможно ли, что программа и выполняемый вручную запрос выполняются под разными учетными данными и, следовательно, имеют разные уровни доступа к базе данных? Это может повлиять на результаты запроса.
Я бы начал с просмотра вашего DataContext. Если ваш DataContext не обновляется с SQL Server, возможно, вы возвращаете более старую версию таблицы.
DataContext поддерживает состояние базы данных при ее создании. Вы хотите использовать свежий контекст для каждого набора операций.
Вы можете использовать DebuggerWriter для проверки фактического SQL, отправленного на сервер.
Другая возможность - это уровень изоляции и характер данных. Вы используете REPEATABLE READ или READ UNCOMMITTED или SNAPSHOT под Linq? А как насчет использования SSMS? Очевидно, что если данные перемещаются, слабый уровень изоляции позволит вам пропускать строки, читать некоторые строки дважды, видеть старую версию строки и т. Д.
Кроме того, не могли бы вы дать нам немного лучшее представление о том, что " очень сложный запрос "как выглядит? Вам не нужно использовать настоящие имена таблиц.
qry.ToList()
Этот оператор создает и возвращает нужный список. Вам нужно присвоить результат чему-то (например, локальной переменной), если вы хотите использовать список позже.
Изменить: спасибо за обновление.
Я подозреваю, что должно быть что-то, о чем вы нам не говорите. это также может быть проблемой, и оно может существовать здесь:
Dim db as MyDataContext = MyGetDataContextHelper()
Этот метод подключается к той же базе данных, что и та, к которой вы подключались при использовании sql studio?
Это может показаться глупым, но всегда полезно проверить, подключаетесь ли вы к той же среде базы данных в SSMS, что и из своего приложения? :)