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中写的数据库路径是错误的。
我的查询必须使用连接字符串,但出现错误
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中写的数据库路径是错误的。