SqlConnection выдает исключение - PullRequest
       29

SqlConnection выдает исключение

3 голосов
/ 13 октября 2009

Уважаемые специалисты, пожалуйста, помогите мне решить следующую проблему. В моем приложении .NET C # есть такой код:

SqlConnection connection = new SqlConnection( SQLCONNECTION_STRING );

Это прекрасно работает на моей машине для разработки, но выдает исключение на сервере Windows 2003. Приложение работает через CGI и имеет уровень «Полное доверие». Я пробовал несколько строк подключения, и я думаю, что строка не вызывает проблемы, потому что даже этот код получает исключение:

SqlConnection connection = new SqlConnection();

Спасибо.


Я нашел два странных факта:

  1. Это работает, если я подключаю отладчик к процессу и просто отслеживаю код.
  2. Это работает, если я запускаю приложение из командной строки (не через CGI, как требуется).

Так что я думаю, что-то не так с взаимодействием CGI и SqlConnection. Кто-нибудь знает об этом?

Спасибо всем за ответы.


Отредактировано, чтобы добавить:

Вот моя строка подключения: "Поставщик = SQLOLEDB; Источник данных = (локальный); Исходный каталог = Пользователи; Идентификатор пользователя = пользователь; Пароль = пароль;"

Я также попробовал несколько возможных вариантов, как описано там: http://www.connectionstrings.com/sql-server

Ниже приведена информация об исключении:

The type initializer for 'System.Data.SqlClient.SqlConnection' threw an exception.
   at System.Data.SqlClient.SqlConnection..ctor()
   at Test.Database.UpdateSQLServerDatabase(IDictionary`2 fields, String regName, StringBuilder regCode)
   at Test.Program.Run()

Type: System.TypeInitializationException

InnerException: System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SqlConnectionFactory' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SqlPerformanceCounters' threw an exception. ---> System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> System.ArgumentException: Illegal characters in path.
   at System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String[] str)
   at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
   at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String path)
   at System.AppDomainSetup.VerifyDir(String dir, Boolean normalize)
   at System.AppDomainSetup.get_ConfigurationFile()
   at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigurationHost.get_ConfigPaths()
   at System.Configuration.ClientConfigurationHost.GetStreamName(String configPath)
   at System.Configuration.ClientConfigurationSystem..ctor()
   at System.Configuration.ConfigurationManager.EnsureConfigurationSystem()
   --- End of inner exception stack trace ---
   at System.Configuration.ConfigurationManager.EnsureConfigurationSystem()
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
   at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection()
   at System.Diagnostics.DiagnosticsConfiguration.Initialize()
   at System.Diagnostics.Switch.InitializeConfigSettings()
   at System.Diagnostics.Switch.InitializeWithStatus()
   at System.Diagnostics.Switch.get_SwitchSetting()
   at System.Diagnostics.TraceSwitch.get_Level()
   at System.Data.ProviderBase.DbConnectionPoolCounters..ctor(String categoryName, String categoryHelp)
   at System.Data.SqlClient.SqlPerformanceCounters..ctor()
   at System.Data.SqlClient.SqlPerformanceCounters..cctor()
   --- End of inner exception stack trace ---
   at System.Data.SqlClient.SqlConnectionFactory..ctor()
   at System.Data.SqlClient.SqlConnectionFactory..cctor()
   --- End of inner exception stack trace ---
   at System.Data.SqlClient.SqlConnection..cctor()

Даже конструктор без параметров дает исключение. Поэтому я не думаю, что проблема в строке подключения. Я вижу, что трассировка стека говорит что-то о "Недопустимых символах в пути". Поэтому я постараюсь развернуть и выяснить. Но, может быть, кто-то уже знает решение.

Ответы [ 7 ]

7 голосов
/ 23 октября 2009

Эта проблема обычно связана с проблемой в вашем файле конфигурации. Возможно, вы захотите воссоздать это.

Спасибо, Дживтеш

2 голосов
/ 13 декабря 2011

У меня была эта проблема, когда мой app.config включал пустую секцию строки подключения, вот так;

<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
    </connectionStrings>
</configuration>

Судя по всему, у вас есть версия, которая работает как консольное приложение, так и веб-приложение. Это означает, что у вас будет app.config для консольного приложения и web.config для сайта asp.net.

Поскольку у вас есть работающее консольное приложение, попробуйте найти различия между эквивалентными разделами и обновите web.config, чтобы он соответствовал вашему app.config.

Кроме того, вы можете рассмотреть различные разрешения, присущие системе - веб-сайт может не иметь разрешения для подключения к базе данных, поскольку он работает как IUSR_<machinename>, но консольное приложение работает под вашими учетными данными пользователя, и вы, вероятно, администратор машины.

0 голосов
/ 18 февраля 2015

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

0 голосов
/ 31 октября 2012

Ошибка, выданная в SqlConnection connection = new SqlConnection();, является правильной, но это происходит из-за ошибки в App.Config, сообщение об ошибке вводит в заблуждение.

0 голосов
/ 29 августа 2012

Если доступ к службе возможен из браузера, проверьте конфигурацию поведения конечной точки на стороне клиента как:

<endpointBehaviors>
        <behavior name="clientEndpoint">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <clientCredentials>
            <windows allowedImpersonationLevel="Delegation"/>
          </clientCredentials>
        </behavior>
</endpointBehaviors>
0 голосов
/ 01 марта 2011

Для меня это была неправильная настройка трассировки web.config, у меня была ошибка

System.Diagnostincs.TextWriterTraceListener

вместо

System.Diagnostics.TextWriterTraceListener

а также имел два элемента трассировки ... решение этих двух проблем решило мою проблему.

0 голосов
/ 13 октября 2009

Попробуйте следующее:

string str="Data Source=[YourServer];Initial Catalog=yourdb;User ID=sa;Password=sa;";
SqlConnection connection = new SqlConnection(str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...