Цитата:
Я попытался использовать этот оператор ниже, чтобы найти соответствующий столбец, основанный на том, что, по моему мнению, он должен быть назван, но не дал никаких результатов. *
blockquote>SELECT * from dba_objects WHERE object_name like '%DTN%'
Столбец не является объектом. Если вы имеете в виду, что вы ожидаете, что имя столбца будет равно «% DTN%», запрос, который вы хотите, это:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
Но если строка «DTN» - это просто догадка с вашей стороны, это вероятно, не поможет.
Кстати, насколько вы уверены, что «1/22 / 2008P09RR8» - это значение, выбранное непосредственно из одного столбца? Если вы вообще не знаете, откуда это происходит, это может быть конкатенация нескольких столбцов или результат некоторой функции или значение, находящееся в вложенном объекте таблицы. Таким образом, вы можете оказаться на дикой охоте на гусей, пытаясь проверить каждый столбец за это значение. Не можете ли вы начать с того, какое клиентское приложение отображает это значение, и попытаться выяснить, какой запрос он использует для его получения?
В любом случае ответ diciu дает один метод генерации SQL-запросов для проверки каждого столбца каждого таблицу для значения. Вы также можете делать подобные вещи полностью в одном сеансе SQL, используя блок PL / SQL и динамический SQL. Вот какой-то поспешно написанный код для этого:
SET SERVEROUTPUT ON SIZE 100000 DECLARE match_count INTEGER; BEGIN FOR t IN (SELECT owner, table_name, column_name FROM all_tab_columns WHERE owner <> 'SYS' and data_type LIKE '%CHAR%') LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name || ' WHERE '||t.column_name||' = :1' INTO match_count USING '1/22/2008P09RR8'; IF match_count > 0 THEN dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count ); END IF; END LOOP; END; /
Есть некоторые способы сделать его более эффективным.
В этом случае, учитывая значение, которое вы ищете, вы можете четко исключить любой столбец с типом NUMBER или DATE, что уменьшит количество запросов. Возможно, даже ограничьте его столбцами, где тип похож на «% CHAR%».
Вместо одного запроса на столбец можно построить один запрос для таблицы следующим образом:
SELECT * FROM table1 WHERE column1 = 'value' OR column2 = 'value' OR column3 = 'value' ... ;
Вы можете попробовать проверить опцию «Свойства» -> «Создать» -> «Разрешить небезопасный код».
Кроме того, для веб-приложений необходимо разрешить запуск 32-разрядных приложений в IIS 7. См. http://www.fishofprey.com/2009/04/badimageformatexception-in-iis-70-on-64 .html
Получил ту же ошибку при вызове 64-битной C Dll из C #. Мне пришлось вручную изменить C # Properties->Build->Platform target
с Any Cpu
на x64
. По-видимому, Any Cpu
иногда является NoCpu.
Я подозреваю, что общая причина этого исключения изменилась за 8 лет с момента первого вопроса. В моей настройке с использованием VS 2017 я обнаружил, что снятие флажка «Предпочитаю 32-бит» решило проблему:
Снимите флажок «Предпочитаете 32-разрядный» в настройках сборки
Это привело к тому, что моя 64-разрядная DLL, построенная из C ++, была загружена правильно. И наоборот, проверка этой опции должна обеспечивать правильную загрузку 32-разрядных DLL.
ОК, кажется ложным предупреждением. Это не было связано с долотостью, было просто другое DLL, которое не зависит от freetype. Однако сообщения об ошибках могут быть более полезными.
Насколько я понимаю, сборка, специально построенная для x86 и работающая в 64-разрядной операционной системе, может загружать только библиотеки, созданные для x86, или будет выведено исключение BadImageFormatException. В 64-битной ОС сборка, созданная для любого процессора или x64, будет бросать одно и то же исключение при попытке загрузить библиотеку x86.
Итак, предполагая, что ничего невероятно странного не происходит, я бы удостоверился, что вы «Я установил ваше приложение для сборки как x86, открыв свойства проекта и щелкнув вкладку« Построение ». Убедитесь, что «Платформа Target» установлена как «x86», а не любой CPU.
В качестве альтернативы вы можете попытаться найти 64-разрядную версию DLL для тестирования.
У меня было такое же Исключение в MS Visual C # Express 2010. Я проверил все файлы .dll и .exe с Dependency Walker и MiTeC EXE Explorer, все было построено для 32 бит!
В конце концов, это была следующая строка, отсутствующая в моем файле .csproj:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'MY_CONFIG|x86'">
...
<PlatformTarget>x86</PlatformTarget>
...
</PropertyGroup>
Я не знаю, почему этого не было ... Я предполагаю, что MS Visual C # Express 2010 не является bugfree;)
У меня была аналогичная ошибка. Я мог бы решить эту проблему, добавив ucrtbase.dll или ucrtbased.dll для отладки, а также vcruntime140.dll или vcruntime140d.dll для отладки в каталог исполняемого файла. Я думаю, что 140 зависит от номера версии используемой Visual Studio.
ucrtbase.dll обычно находится в C:\Windows\System32
. vcruntime140.dll находится в C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger\x86\vcruntime140.dll
. Вы можете найти дополнительную информацию здесь: http://blogs.msdn.com/b/vcblog/archive/2015/03/03/introducing-the -универсальным-crt.aspx
Скомпилируйте dll с опцией «Любой процессор» в Build -> Platform.
[/g0]
Когда вы создаете собственное приложение / DLL-приложение с Visual Studio, оно получает зависимость от «распространяемого» пакета для этой версии Visual Studio. Это содержит DLL, такие как msvcr100.dll
и msvcp100.dll
(для различных значений 100).
В моем случае я видел эти DLL в каталоге Windows/system32
целевой машины, поэтому я думал, что все в порядке , Оказывается, эти DLL-файлы были x64! Я не знаю, почему каталог с именем system32
содержит 64-битные библиотеки DLL. Поэтому я искал свой каталог Visual Studio 2010 для всего, что назвал msvc*.dll
, и нашел x86 версии msvcr100.dll
и msvcp100.dll
. Я скопировал их на целевую машину (в месте, доступном по пути моей программы), и все было хорошо.
Надеюсь, это поможет кому-то еще столкнуться с явным безумием Microsoft.
вы используете свойства в проекте C # и меняете «Цель платформы» на x64. введите здесь описание изображения