【问题标题】:NullReference at ConnectionString连接字符串的空引用
【发布时间】:2015-06-17 02:26:20
【问题描述】:

1 解决方案。

2个项目(1.WEB-2.三层结构)

调用存储过程: Web -> BOL -> BLL -> DAL。

DAL的方法:获取连接字符串并执行。

 public DataSet ExecuteSQL(string sp, Persona user)
    {
        EH eh = new EH(); // Error_Handling.cs object
        try
        {
            DataSet ds = new DataSet();
            string connectionString = null;
            connectionString = GetNewConnection("BO"); //HERE COMES THE ERROR
            SqlConnection conn = new SqlConnection(connectionString);
            using (conn)
            { ....

GetNewConnection()。

 public string GetNewConnection(string server)
    {
        return ConfigurationManager.ConnectionStrings["BO"].ConnectionString;
    }

App.Config片段命名所需的连接

<connectionStrings>
<add name="BO"
    connectionString="Data Source=Server;Initial Catalog=BO;User ID=WebUser;Password=333;Integrated Security=False"
    providerName="System.Data.SqlClient" />

从 GetNewConnection() 返回时出现以下异常

  • $exception {"对象引用未设置为对象的实例。"} System.Exception {System.NullReferenceException}

为什么它得到一个空引用?

【问题讨论】:

  • App.config 用于 web 项目?不应该是 web.config 吗?
  • 顺便说一句:在GetNewConnection,你不应该使用server参数而不是硬编码"BO"吗?
  • @AndreCalil 是的,这是为了测试目的。
  • DLL 通常没有自己的配置文件(配置系统当然没有使这种情况变得容易的默认设置)。这是因为 DLL 被加载到可执行进程中 - 配置系统假定所有配置都将成为该可执行文件的一部分。

标签: c# asp.net


【解决方案1】:

你应该在 UI 项目的 Web.Config 中有 ConnectionString,你的 WEB 项目

复制 ConnectionString 部分并粘贴到您的 Web.Config 中,它应该可以正常工作

【讨论】:

  • 但我希望它在 DLL 中。因为一旦系统运行。网页可能会在另一个位置。所以,如果 Web 请求去一个服务器进行 C#,然后在执行 SQL 之前,它必须去另一台服务器获取连接字符串,然后再回到另一台服务器执行 SQL ......听起来很浪费时间。我错过了什么吗?
  • 是的 - DLL 将作为 Web 项目的一部分在 Web 服务器上
  • 您将在同一台服务器上部署您的 Web 文件和 DLL(数据访问层项目 DLL),仪式? Web 应用程序的相同 bin 文件夹?
  • @Shyju 哦,我很困惑,是的,他们会在同一个服务器上。
【解决方案2】:

连接字符串应该在web.config,而不是app.config

【讨论】:

  • 请检查上一个答案的评论。
猜你喜欢
  • 1970-01-01
  • 2015-01-13
  • 2010-10-30
  • 2011-12-06
  • 1970-01-01
  • 2012-05-10
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多