0

我正在开发的一个应用程序是使用 Microsoft Practices Enterprise 来处理数据库交互。

这一切都很好,但是在某些时候它只是停止了工作。我唯一能想到的是,我从部署在另一台机器上的另一个数据库恢复了我正在处理的数据库(由具有与我现在使用的帐户不同的帐户的用户访问)。

我创建了 2 个小测试(1 个解决方案,1 个项目有 1 个类,Program.cs),第一个有效:

        static void test1()
        {
            // Create a connection
            SqlConnection sdwDBConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Test"].ToString());

            // Open the connection
            sdwDBConnection.Open();

            // Create a String to hold the query.
            string query = "SELECT * FROM [TestDB].[dbo].[Test1]";

            // Create a SqlCommand object and pass the constructor the connection string and the query string.
            SqlCommand queryCommand = new SqlCommand(query, sdwDBConnection);

            // Use the above SqlCommand object to create a SqlDataReader object.
            SqlDataReader queryCommandReader = queryCommand.ExecuteReader();

            // Create a DataTable object to hold all the data returned by the query.
            DataTable dataTable = new DataTable();

            // Use the DataTable.Load(SqlDataReader) function to put the results of the query into a DataTable.
            dataTable.Load(queryCommandReader);

            // Example 1 - Print your  Column Headers
            String columns = string.Empty;
            foreach (DataColumn column in dataTable.Columns)
            {
                columns += column.ColumnName + " | ";
            }
            Console.WriteLine(columns);

            // Close the connection
            sdwDBConnection.Close();
            System.Console.Read();
        }

产量:

ID1 | 价值1 | 价值2 | 价值3 |

但是第二个失败了:

        static void test2()
        {
            try
            {
                Database db = DatabaseFactory.CreateDatabase("Test");    //Line 59
                using (DbCommand cmd = db.GetSqlStringCommand("SELECT * FROM [TestDB].[dbo].[Test1]"))
                {
                    using (IDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            System.Console.WriteLine("{0} {1} {2}", reader.GetInt64(0)      
                            , reader.GetString(1) 
                            , reader.GetString(2));
                        }
                    }
                }
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message + "\n" + e.StackTrace);
            }
            finally
            {
                System.Console.Read();
            }
        }

产量:

The requested database Test is not defined in configuration.
   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp[T](IReadWriteLocator locator, ILifetimeContainer
 lifetimeContainer, String id, IConfigurationSource configurationSource)
   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp[T](String id, IConfigurationSource configuration
Source)
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase(String name)
   at ....Program.test2() in ...\Program.cs:line 59

这是我的app.config

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />    
  </configSections>  
  <dataConfiguration defaultDatabase="Test" />
  <connectionStrings>       
  <add name="Test" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=SSPI; Connect Timeout=120" providerName="System.Data.SqlClient" />    
  </connectionStrings>  
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>
</configuration>

认为,如果有任何连接/配置问题,第一个也会失败。我也尝试过使用空构造函数,但这只会引发另一个异常,即String参数不能为null空或为空。

对此的任何见解将不胜感激。

4

2 回答 2

1

事实证明,微软产品之间存在冲突。就我而言,它是 ESB Toolkit 安装。更多信息可在此处获得。

就我而言,卸载 ESB 工具包是可行的方法。

于 2013-03-07T10:15:02.887 回答
1

如果你使用

Database sda = DatabaseFactory.CreateDatabase("DBConnectionString");

确保你有这个设置App.config

"connectionStrings
    add name="DBConnectionString" connectionString="server=DBServerNameHere;database=DatabaseNameHere;Integrated Security=true;" providerName="System.Data.SqlClient"
  connectionStrings"
于 2016-08-11T18:20:48.157 回答