C#, Получающие корректный DbConnection, возражают строкой подключения

(1/3) означает целочисленное деление, поэтому вы не можете получить десятичное значение из этого деления. Для решения этой проблемы используйте:

public static void main(String[] args) {
        double g = 1.0 / 3;
        System.out.printf("%.2f", g);
    }
21
задан Mark Cidade 9 October 2008 в 01:56
поделиться

4 ответа

   DbConnection GetConnection(string connStr)
    { string providerName = null;
      var    csb = new DbConnectionStringBuilder{ConnectionString=connStr};

      if (csb.ContainsKey("provider")) 
       { providerName = csb["provider"].ToString();
       }          
      else
       { var css = ConfigurationManager
                           .ConnectionStrings
                           .Cast<ConnectionStringSettings>()
                           .FirstOrDefault(x=>x.ConnectionString==connStr);
         if (css != null) providerName = css.ProviderName;
       }

      if (providerName != null) 
       { var providerExists =  DbProviderFactories
                                     .GetFactoryClasses()
                                     .Rows.Cast<DataRow>()
                                     .Any(r=>r[2].Equals(providerName));
         if (providerExists) 
          { var factory = DbProviderFactories.GetFactory(providerName);
            var dbConnection = factory.CreateConnection();

            dbConnection.ConnectionString = connStr;
            return dbConnection;
          }
       }

      return null;
   }
30
ответ дан Mark Cidade 29 November 2019 в 19:59
поделиться

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

DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory(myDriverClass);
DbConnection dbConnection = dbProviderFactory.CreateConnection();
dbConnection.ConnectionString = myConnectionString;

Вот ссылка MSDN на класс Фабрики: http://msdn.microsoft.com/en-us/library/wda6c36e.aspx

19
ответ дан Eric Tuttleman 29 November 2019 в 19:59
поделиться

Необходимо быть в состоянии проанализировать раздел Provider и передать его в DbProviderFactories. GetFactory, который возвратит OdbcFactory, OleDbFactory или SqlClientFactory и позволит Вам затем выполнить CreateConnection и т.д.

, я не уверен, как это работало бы с Oracle, если они не обеспечивают OracleDbFactory.

1
ответ дан DamienG 29 November 2019 в 19:59
поделиться

Большинство строк подключения (по крайней мере, в.NET 2.0) также имеет providerName свойство, которое идет с ними. Таким образом, строка подключения SQL сделает, чтобы поставщик Назвал как:

providerName="System.Data.SqlClient"

, Таким образом, Ваш метод должен был бы принять и строку подключения и имя поставщика, и затем Вы могли использовать DbProviderFactory , как упомянуто damieng.

1
ответ дан Community 29 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

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