C# 错误 ;26 ;无法隐式转换类型';对象';至';字符串';。存在显式转换(是否缺少强制转换?)

C# 错误 ;26 ;无法隐式转换类型';对象';至';字符串';。存在显式转换(是否缺少强制转换?),c#,asp.net,sql,C#,Asp.net,Sql,我得到以下错误错误26无法隐式转换类型 “对象”到“字符串”。存在显式转换(是否缺少 转换?在这一行上字符串str=rd[0].ToString();当尝试以字符串形式获取文件路径时,有人能整理出我的 问题 提前谢谢 try { using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString())) {

我得到以下错误错误26无法隐式转换类型 “对象”到“字符串”。存在显式转换(是否缺少 转换?在这一行上字符串str=rd[0].ToString();当尝试以字符串形式获取文件路径时,有人能整理出我的 问题

提前谢谢

try
{
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()))
    {
        SqlCommand cmd = new SqlCommand();

        String query = "select [PDFFilePath] from [dbo].[AdmPDFManage] Where [PdfId] = (SELECT MAX([PdfId]) FROM [dbo].[AdmPDFManage]) ";
        cmd.Connection = con;
        cmd.CommandText = query;
        con.Open();
        SqlDataReader rd = new SqlDataReader();
        while (rd.Read())
        {
            string str = rd[0].ToString();

        }
    }
}
catch (Exception ex)
{
    throw;
}
我也尝试了这个,但是得到了同样的错误


我无法复制这个问题;它应该很好用。然而,有两个问题:

  • 错误地创建
    SqlDataReader
  • 不使用配置项中的
    .ConnectionString
以下内容很好:

using (var con = new SqlConnection(
    ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
using (var cmd = con.CreateCommand())
{
    const string query = "select [PDFFilePath] from [dbo].[AdmPDFManage] Where [PdfId] = (SELECT MAX([PdfId]) FROM [dbo].[AdmPDFManage]) ";
    cmd.CommandText = query;
    con.Open();
    using(var rd = cmd.ExecuteReader())
    {
        while (rd.Read())
        {
            string str = rd[0].ToString();
            // .. do something
        }
    }
}
请注意,如果只需要一行,
ExecuteScalar
更简单:

cmd.CommandText = query;
con.Open();
string str = (string) cmd.ExecuteScalar();

具体在哪一行?
rd[0]
的值到底是多少?调试您的代码并告诉我们。您的代码未显示任何对象到字符串的分配。。。您能否澄清哪一行标记此错误?另外:异常处理是冗余的,应该removed@Trafz不,那是个坏建议;使用的
处理这个问题;在
Close()
中添加一个额外的
try
/
finally
是毫无意义的,并且会引入更多的出错位置。不要那样做<代码>使用
就可以了。不好的建议被删除。我仍然使用try-catch-finally而不是使用,因为我不确定它是否真的关闭了它。我想我不应该再这样了。这行代码是如何编译SqlDataReader rd=new SqlDataReader()的?它不应该是SqlDataReader dr=cmd2.ExecuteReader()吗?
cmd.CommandText = query;
con.Open();
string str = (string) cmd.ExecuteScalar();