SqlConnection 给出对象引用错误

SqlConnection giving object reference error

我的查询必须使用连接字符串,但出现错误

object reference not set to an instance of an object.

这是我的代码:

string strSql = "select first_name + ' ' + last_name name, email from user_mst where mkey in (" + Session["UserId"].ToString() + ")";

DataTable table = new DataTable();

using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString()))
{
    conn.Open();

    using (SqlDataAdapter dbdata = new SqlDataAdapter(strSql, conn))
    {
        dbdata.Fill(table);
    }

    conn.Close();
}

我在

收到错误
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString()))

但我的人脉关系似乎很好。

System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString()) 返回 null 然后传递给 SqlConnection 构造函数。 检查您的配置文件是否有效,是否包含名为 ConnectionString 的密钥。是这样的: <add key="ConnectionString" values="[your connection string]"/>

通常连接字符串存储在网络配置的适当部分。此部分很容易被 WebConfigurationManager 读取,它存储在 ConnectionString 集合中

// You need this reference to System.Web.Configuration.dll
// and remove the using System.Configuration;
using System.Web.Configuration;

....
string cons = WebConfiguration.ConnectionStrings["ConnectionString"].ConnectionString;

using(SqlConnection cnn = new SqlConnection(cons))
.....

此外,虽然在您的上下文中使用 ConfigurationManager 可能也能正常工作,但您确实应该为 Web 应用程序使用 WebConfigurationManager

See ConfigurationManager vs WebConfigurationManager

按照您的要求,这里是经过修改的代码,应该更易于调试,或者至少只是捕获缺少的连接字符串配置元素。

    string conString = string.Empty;
    try
    {
       conString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
    }
    catch(Exception)
    {
       MessageBox.Show("Unable to retrieve 'ConnectionString' from configuration file.");
    }
    string strSql = "select first_name + ' ' + last_name name, email from user_mst where mkey in (" + Session["UserId"].ToString() + ")";
    DataTable table = new DataTable();
    using (SqlConnection conn = new SqlConnection(conString))
    {
        conn.Open();
        using (SqlDataAdapter dbdata = new SqlDataAdapter(strSql, conn))
        {
            dbdata.Fill(table);
        }
        conn.Close();
    }

调试您的代码后,您的问题似乎源于您的配置文件以及您访问连接字符串的方式。更改您的代码:

try
{
   conString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
}
catch(Exception)
{
   MessageBox.Show("Unable to retrieve 'ConnectionString' from configuration file.");
}

try
{
   conString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
}
catch(Exception)
{
   MessageBox.Show("Unable to retrieve 'ConnectionString' from configuration file.");
}

假设 ConnectionString 条目也被命名为 "ConnectionString",这应该可以解决您的问题。

TLDR:正如评论中多次提到的,将 AppSettings 更改为 ConnectionStrings 将解决您的问题。

tostring()写在using语句里面会抛出异常,不知道为什么,我也遇到过这个问题。你的代码应该是这样的:

using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    conn.Open();
    using (SqlDataAdapter dbdata = new SqlDataAdapter(strSql, conn))
    {
        dbdata.Fill(table);
    }
    conn.Close();
}

在使用此代码之前,您必须在程序集->框架中右键单击 "References" 和 "add reference",在您的项目中添加对 System.Configuration 的引用。

请正确检查web.config中的AppSettings。我确定你在appsetting中写的数据库路径是错误的。