2013-11-20 48 views
1

嗨我遇到此错误,当我尝试运行该程序。我相信它是因为在SQL Server中这是一个True还是False? 1还是0?有谁知道如何解决?无法铸造'System.Boolean'类型的对象来键入'System.String'

void StaticS() 
    { 

     string constring = "REMOVED"; 
     string Query = "REMOVED"; 
     SqlConnection conDataBase = new SqlConnection(constring); 
     SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase); 
     SqlDataReader myReader; 
     try 
     { 
      conDataBase.Open(); 
      myReader = cmdDataBase.ExecuteReader(); 

      while (myReader.Read()) 
      { 
       string sName = myReader.GetString(0); 
       comboBox17.Items.Add(sName); 

      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 

回答

2
string sName = myReader[0].ToString(); 

如果你想从DataReader的值只有字符串表示不会对真正的价值型关注 - 您可以使用DataReader的索引并调用ToString()方法。

+0

哇这么简单的Fix哈哈。谢谢! – user3014698

+1

请你解释一下吗? –

+0

对不起,请解释一下?为什么我建议使用索引器和ToString()而不是GetBoolean()?由于请求中有此操作的返回值。 –

0

这听起来像场0是一个bit场,在这种情况下,你使用:

bool sName = myReader.GetBoolean(0); 
2

看这句话:

string sName = myReader.GetString(0); 

GetString方法返回string,所以这里的代码没有铸造。但是GetString本身是通过读取字段0并试图将其转换为string来实现的。看起来字段0是一个布尔字段,并且没有从布尔值到字符串的自动转换。因此GetString()失败。

相反,你可以明确地执行转换:

string sName = myReader[0].ToString(); 

这里,myReader[0]读取场和返回值object。然后由你决定如何将它变成一个字符串。

相关问题