У меня довольно странная проблема.C# SqlConnection (IIS issue?) «Свойство ConnectionString не было инициализировано»
У меня есть приложение C#/ASP.Net, которое подключается к базе данных SQL для извлечения информации.
Когда я запускаю его локально, он работает отлично. Я могу получить данные, никаких проблем.
Я попытался развернуть его на сервере IIS на моей сети, и я начал получать ошибку: The ConnectionString property has not been initialized
Как правило, это означает, что переменная не инициализирована/не имеет значения, что это странно поскольку он выполняется локально. У меня есть все файлы и т. Д.
Я решил попробовать что-то еще - я добавил раздел кода (File.WriteAllText).
private DataTable getStoredProcResults(string procName, string[][] parameters)
{
InitSql(true);
DataTable dt = new DataTable();
File.WriteAllText(@"C:\Temp\CONNECTION.LOG", connectionDetails.ConnectionString); //Added this
using (SqlConnection sqlConn = new SqlConnection(connectionDetails.ConnectionString))
{
sqlConn.Open();
SqlCommand sqlComm = new SqlCommand(procName, sqlConn);
foreach (string[] param in parameters)
{
sqlComm.Parameters.AddWithValue(param[0], param[1]);
}
sqlComm.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlComm;
da.Fill(dt);
sqlConn.Dispose();
}
return dt;
}
Это то место, где оно становится странным. Я могу записать connectionDetails.ConnectionString в текстовый файл, и он имеет правильное значение. Я сравнил значение на веб-сервере IIS с текстовым файлом, когда я его запускаю локально, а строка соединения точно такая же.
Как он может записать строку подключения в текстовый файл, если следующие строки ошибок, указывающих, что ConnectionString не инициализируется?
Вот полная ошибка на сервере IIS, когда я захожу на страницу:
The ConnectionString property has not been initialized.
Exception Details: System.InvalidOperationException: The ConnectionString property has not been initialized.
трассировки стека:
[InvalidOperationException: The ConnectionString property has not been initialized.]
System.Data.SqlClient.SqlConnection.PermissionDemand() +6610944
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6605639
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278
System.Data.SqlClient.SqlConnection.Open() +239
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +292
System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +487
System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +293
GenericPortalWebForms.Logic.HourGlassJob.getResultSet(String sqlCommand, Boolean fromHourGlassDB) in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Logic\HourGlassJob.cs:297
GenericPortalWebForms.Logic.HourGlassJob.setJobDetails(Int64 wrID) in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Logic\HourGlassJob.cs:75
GenericPortalWebForms.Logic.HourGlassJob..ctor(DataRow hgJobRow) in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Logic\HourGlassJob.cs:40
GenericPortalWebForms.HourGlass.GetAllHGjobs() in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Hourglass.aspx.cs:49
GenericPortalWebForms.HourGlass.Page_Load(Object sender, EventArgs e) in c:\Users\cthompso\Source\Workspaces\CustomSolutions\Sema\GenericPortal\Hourglass\Web\Hourglass.aspx.cs:26
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178
============== =============================================
Редактировать: Извините, мой код находится здесь:
Когда Сначала я создаю объект, который я инициализирую его с самого начала.
private ConnectionStringSettings connectionDetails = ConfigManager.HourglassDb;
От Config Manager:
public static ConnectionStringSettings HourglassDb
{
get { return ConfigurationManager.ConnectionStrings[ConnectionStringName.Split(',')[2]]; }
}
и из web.config:
<add key="ConnectionStringName" value="name=BLAH1,BLAH2,BLAH3,BLAH4" />
<connectionStrings>
<add name="BLAH3" connectionString="Data Source=SERVER;Initial Catalog=DATABASE;User ID=USER;Password=PASSWORD;" providerName="System.Data.SqlClient" />
</connectionStrings>
Как заполняется значение *** connectionDetails.ConnectionString ***? Проблема, скорее всего, есть, но мы не видим этот код. – Esko
Извинения, добавлено сейчас. Параметры ConnectionStringSettings устанавливаются из диспетчера конфигураций, который возвращает одну строку соединения. –
Не могли бы вы воспроизвести эту проблему на локальном экземпляре IIS? –