【问题标题】:Error 26 Cannot implicitly convert type 'object' to 'string'. An explicit conversion exists (are you missing a cast?)错误 26 无法将类型“对象”隐式转换为“字符串”。存在显式转换(您是否缺少演员表?)
【发布时间】:2014-04-06 01:01:15
【问题描述】:

我收到以下错误 错误 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;
}

我也尝试了这个,但得到了同样的错误

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();

                String PDFfilePath = (String)cmd.ExecuteScalar();              

            }

【问题讨论】:

  • 究竟在哪一行? rd[0] 的值究竟是多少?调试您的代码并告诉我们。
  • 您的代码没有显示任何对象到字符串的分配...您能澄清哪一行标记了这个错误吗?另外:异常处理是多余的,应该删除
  • @Trafz 不,这是个坏建议; using 处理该问题;在Close() 中添加一个额外的try/finally 是没有意义的 - 并引入了更多出错的地方。不要那样做。 using 很好。
  • 哦。删除了不好的建议。我仍然使用 try-catch-finally 而不是使用,因为我不确定它是否真的关闭了它。我想我不应该了。
  • 这一行是怎么编译SqlDataReader rd = new SqlDataReader()的?不应该是SqlDataReader dr = cmd2.ExecuteReader()?

标签: c# asp.net sql


【解决方案1】:

我无法重现该问题;它应该可以正常工作。但是,有两个问题:

  • 错误地创建了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
        }
    }
}

请注意,如果您只期望 1 行,ExecuteScalar 更简单:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多