在我的解决方案中我建了一个程序集,里面有2个文件:
DataAccessProvider.classusing System;
using System.Collections.Generic;
using System.Text;
using System.Data.Common;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Data.OracleClient;
using System.Transactions;
namespace Taobao.SqlHelp
{
    public class DataAccessProvider
    {
        private static string connString;
        private static string providerName;
        static DataAccessProvider()
        {
            ConnectionStringSettings setting = ConfigurationManager.ConnectionStrings["DSN"];
            connString = setting.ConnectionString;
            providerName = setting.ProviderName;
            System.Diagnostics.Debug.WriteLine(providerName);
        }
        public static DbConnection GetConneciton()
        {
            DbProviderFactory factroy = DbProviderFactories.GetFactory(providerName);
            DbConnection conn = factroy.CreateConnection();
            conn.ConnectionString = connString;
            return conn;
        }        private static DbDataAdapter GetDataAdapter()
        {
            DbProviderFactory factroy = DbProviderFactories.GetFactory(providerName);
            DbDataAdapter da = factroy.CreateDataAdapter();
            return da;
        }        public static DbCommand GetCommand(string commandText, CommandType commandType)
        {
            DbConnection conn = GetConneciton();
            DbCommand cmd = conn.CreateCommand();
            cmd.CommandText = commandText;
            cmd.CommandType = commandType;
            return cmd;
        }        public static DbDataReader GetDataReader(string commandText, CommandType commandType)
        {
            DbCommand cmd = GetCommand(commandText, commandType);
            cmd.Connection.Open();
            DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return reader;
        }        public static bool ExecuteNonQuery(string commandText, CommandType commandType)
        {
            DbCommand cmd = GetCommand(commandText, commandType);
            DbConnection conn = cmd.Connection;
            DbTransaction trans = null;
            bool result;
            try
            {
                conn.Open();
                trans = conn.BeginTransaction();
                cmd.ExecuteNonQuery();
                trans.Commit();
                result = true;
            }
            catch (SqlException)
            {
                if (trans != null)
                {
                    trans.Rollback();
                }
                result = false;
            }
            finally
            {
                if (conn != null && conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            return result;
        }        public static object ExecScalar(string commandText, CommandType commandType)
        {
            DbCommand cmd = GetCommand(commandText, commandType);
            DbConnection conn = cmd.Connection;
            conn.Open();
            object obj = cmd.ExecuteScalar();
            conn.Close();
            return obj;
        }        public static DataTable GetDataTable(string commandText, CommandType commandType)
        {
            return GetDataTable(commandText, commandType, 0, 0);
        }        public static DataTable GetDataTable(string commandText, CommandType commandType, int start, int count)
        {
            DbDataAdapter da = GetDataAdapter();
            DbCommand cmd = GetCommand(commandText, commandType);
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            DbConnection conn = cmd.Connection;
            conn.Open();
            if (start == 0 && count == 0)
            {
                da.Fill(dt);
            }
            else
            {
                da.Fill(start, count, dt);              
            }
            conn.Close();
            return dt;
        }
   }
}App.config<configuration>
<connectionStrings>
<add name="DSN" connectionString="server=(local);DataBase=dataname;uid=user;pwd=" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
然后再其他的程序集中引用这个程序集,结果报错:
"***.DataAccessProvider”的类型初始值设定项引发异常后来通过断点发现,在ConnectionStringSettings setting = ConfigurationManager.ConnectionStrings["DSN"];
            connString = setting.ConnectionString;
根本没有获得到值,不知道问题出在哪里,请大家多帮忙,谢谢!!

解决方案 »

  1.   

    ConnectionStringSettings setting = ConfigurationManager.ConnectionStrings["DSN"].ConnectionString
      

  2.   

    错了 你看这个行不string setting = ConfigurationManager.ConnectionStrings["DSN"].ConnectionString;
      

  3.   

    真不行,把配置节放到<appSettings>节点下试试ConfigManager.AppSettings[]
      

  4.   

    你web.config中的connectionString  的c大写
      

  5.   

    ConfigurationManager.ConnectionStrings["DSN"].ConnectionString
      

  6.   

    程序集里有个App.config,引用程序集的站点有个web.config,我是不是应该把connectionString节点放到web.config里啊,我现在有点搞不清楚,使用程序集类的时候,它会去哪个config文件里找了,可我2个文件都有,它依然是找不到,很奇怪!
      

  7.   

    放错位置了吧,放下web.config里试下
      

  8.   

    string strCon = ConfigurationManager.ConnectionStrings["DSN"].ToString();
    这样试试