Вызов функции c ++ в .NET [duplicate]

Цитата:

Я попытался использовать этот оператор ниже, чтобы найти соответствующий столбец, основанный на том, что, по моему мнению, он должен быть назван, но не дал никаких результатов. *

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'
     ...
     ;
29
задан Coder 28 April 2010 в 11:20
поделиться

11 ответов

Вы можете попробовать проверить опцию «Свойства» -> «Создать» -> «Разрешить небезопасный код».

0
ответ дан ADM-IT 18 August 2018 в 12:52
поделиться

Кроме того, для веб-приложений необходимо разрешить запуск 32-разрядных приложений в IIS 7. См. http://www.fishofprey.com/2009/04/badimageformatexception-in-iis-70-on-64 .html

4
ответ дан Anastacia 18 August 2018 в 12:52
поделиться

Получил ту же ошибку при вызове 64-битной C Dll из C #. Мне пришлось вручную изменить C # Properties->Build->Platform target с Any Cpu на x64. По-видимому, Any Cpu иногда является NoCpu.

4
ответ дан BSalita 18 August 2018 в 12:52
поделиться

Я подозреваю, что общая причина этого исключения изменилась за 8 лет с момента первого вопроса. В моей настройке с использованием VS 2017 я обнаружил, что снятие флажка «Предпочитаю 32-бит» решило проблему:

Снимите флажок «Предпочитаете 32-разрядный» в настройках сборки

Это привело к тому, что моя 64-разрядная DLL, построенная из C ++, была загружена правильно. И наоборот, проверка этой опции должна обеспечивать правильную загрузку 32-разрядных DLL.

0
ответ дан Caleb 18 August 2018 в 12:52
поделиться

ОК, кажется ложным предупреждением. Это не было связано с долотостью, было просто другое DLL, которое не зависит от freetype. Однако сообщения об ошибках могут быть более полезными.

6
ответ дан Coder 18 August 2018 в 12:52
поделиться
  • 1
    Эта половина решает мою проблему с BadImageFormatException - я забыл копировать файлы зависимых DLL. К сожалению, теперь я получаю DllNotFoundException в оригинальной DLL ... – jarmond 6 July 2012 в 16:20
  • 2
    Пожалуйста, отметьте этот вопрос как ответ – Stefan Z Camilleri 28 August 2013 в 12:02
  • 3
    @jarmond убедитесь, что вы создали версию Release (не Debug) – Alexander Trofimov 5 November 2017 в 15:07

Насколько я понимаю, сборка, специально построенная для x86 и работающая в 64-разрядной операционной системе, может загружать только библиотеки, созданные для x86, или будет выведено исключение BadImageFormatException. В 64-битной ОС сборка, созданная для любого процессора или x64, будет бросать одно и то же исключение при попытке загрузить библиотеку x86.

Итак, предполагая, что ничего невероятно странного не происходит, я бы удостоверился, что вы «Я установил ваше приложение для сборки как x86, открыв свойства проекта и щелкнув вкладку« Построение ». Убедитесь, что «Платформа Target» установлена ​​как «x86», а не любой CPU.

В качестве альтернативы вы можете попытаться найти 64-разрядную версию DLL для тестирования.

37
ответ дан Eric Smith 18 August 2018 в 12:52
поделиться
  • 1
    Я на 100% уверен, что мое приложение C # - 32-битное. Я даже использовал CORFLAGS, чтобы проверить его: Версия: v2.0.50727 CLR Заголовок: 2.5 PE: PE32 CorFlags: 3 ILONLY: 1 32BIT: 1 Подписан: 0 – Coder 28 April 2010 в 11:48
  • 2
    @ Эрик Смит У меня была такая же проблема ... это исправлено. Спасибо огромное! – bsara 4 June 2012 в 17:39
  • 3
    +1. Имея ту же проблему и успешно ее исправил. – Dean Seo 16 April 2013 в 03:23
  • 4
    Да, и то же самое происходит наоборот. Например, если 64-разрядное приложение пытается загрузить 32-разрядную DLL. – StuWeldon 31 August 2014 в 05:16

У меня было такое же Исключение в 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;)

-1
ответ дан Jane 18 August 2018 в 12:52
поделиться

У меня была аналогичная ошибка. Я мог бы решить эту проблему, добавив 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

2
ответ дан Peter Ittner 18 August 2018 в 12:52
поделиться

Скомпилируйте dll с опцией «Любой процессор» в Build -> Platform.

enter image description here [/g0]

6
ответ дан RckLN 18 August 2018 в 12:52
поделиться

Когда вы создаете собственное приложение / 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.

1
ответ дан ulatekh 18 August 2018 в 12:52
поделиться

вы используете свойства в проекте C # и меняете «Цель платформы» на x64. введите здесь описание изображения

0
ответ дан xuanbka1 18 August 2018 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: