Строка подключения C # - PullRequest
0 голосов
/ 19 марта 2012
public string ConnectionString = string.Empty;

В строке выше, если строка подключения назначена как string.empty, то как строка подключения получит свое значение?Я не понимаю, что именно это означает.

Код, который я читаю, содержит следующее после вышеприведенного утверждения:

  public DataSet GetData(SqlCommand cmd)
{
    SqlConnection conn = new SqlConnection(this.ConnectionString);
    DataSet ds = new DataSet();
    try
    {
        cmd.Connection = conn;
        SqlDataAdapter ad = new SqlDataAdapter(cmd);
        conn.Open();
        ad.Fill(ds);
        cmd.Parameters.Clear();

    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        cmd.Parameters.Clear();
        conn.Close();
    }
    return ds;
}

Итак, где строка подключения получает значение от * 1007?*

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

Ответ на ваш вопрос заключается в том, что если ваш класс имеет это ConnectionString в качестве свойства, то объект SqlConnection здесь не может соединиться с чем-либо, поскольку ему было передано значение String.Empty.

Он магическим образом не вычисляет значение, просто никогда не будет подключаться ни к чему, поскольку у вас нет действительной строки подключения. Этот код на самом деле подключается? если это так, он не может использовать String.Empty, как вы описываете.

Для пояснения я ожидал бы, что строка подключения будет получена из какого-либо объекта настроек, либо из файла .config, либо другого подобного механизма.

Пытаясь помочь, я предполагаю, что вы используете ASP.net, как показано ниже, вы говорите о переменной post. Эти типы приложений обычно читают из файла web.config, как показано ниже.

Тогда ваша переменная строки подключения будет инициализирована фрагментом кода, который выглядит примерно так: если в элементах connectionString есть несколько ключей (отмеченных элементом add), то вы получаете доступ через индексатор, как показано.

ConnectionStringSettings connectionStringSettings = ConfigurationManager.ConnectionStrings["ApplicationServices"];
string connectionString = connectionStringSettings.ConnectionString;

код конфигурации:

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation debug="false" targetFramework="4.0" />

    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
      </providers>
    </profile>

    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

  </system.web>

  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>
2 голосов
/ 21 марта 2012

Щелкните правой кнопкой мыши на this.ConnectionString и найдите все ссылки. Я уверен, что он устанавливается где-то в вашем коде, прежде чем он попадет в публичный DataSet GetData (SqlCommand cmd)

...