2013-11-14 26 views
0

好吧我最初开始使用Convert.ToInt32(myradTextBox.Text)然后它说,指定的强制转换是无效的。我在这里做了一些研究,并决定尝试Int.TryParse。一旦这样做,我仍然收到这个错误。我想要做的是,当用户输入一个ID并点击创建按钮时,它会搜索数据库以查看该ID是否已经存在。我也尝试使用Convert.ToInt32(Result)仍然相同的错误(请参阅下面的第三个代码文章中将发布的位置)将我的Int.TryParse的布尔值转换为int。也许这与我的比较方法有关。Int.TryParse不解决指定的强制转换是无效的错误

下面我提供了Int.TryParse方法的值。我打电话来检查userinput的方法不在当前的数据库中,而我的if语句正在捕获该语句。任何关于如何解决这个问题的输入将不胜感激。我对这些东西中的大部分还是新的,所以如果将任何关键信息都关闭,我很抱歉。只是问你是否需要澄清或详细说明。

这里是我的比较方法:

public bool isValidID(int id) 
{ 
    SqlConnection dbConn = null; 
    int count = 0; 
    try 
    { 
     using (dbConn = new SqlConnection(Properties.Settings.Default["tville"].ToString())) 
     { 
      string sql = "SELECT Count(*) FROM PackLabelFormat where PackFormatID = @PackFormatID"; 

      SqlCommand cmd = dbConn.CreateCommand(); 

      cmd.CommandText = sql; 
      cmd.Parameters.AddWithValue("@PackFormatID", id); 
      dbConn.Open(); 

      using (SqlDataReader reader = cmd.ExecuteReader()) 
      { 
       reader.Read(); 
       count = reader.GetInt16(0); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    if (count > 0) 
     return false; 
    return true; 

} 

这里是我的变量,我在我的Int.TryParse方法使用:

string IDselect = rTxtBoxFormatID.Text.ToString(); 
     int resultInt; 

     bool result = int.TryParse(IDselect, out resultInt); 

最后这里是我的方法是捕获错误:

SqlConnection dbConn = null; 
     LabelData labelList = new LabelData(); 

     try 
     { 
      using (dbConn = new SqlConnection(Properties.Settings.Default["tville"].ToString())) 
      { 
       if (SelectedVersion.isValidID(resultInt)) 
       { 
        SelectedVersion.PackFormatID = resultInt; 
       } 
       else 
       { 
        MessageBox.Show("ID already in use!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
+0

什么行引发错误,什么是错误? 'int.TryParse'返回'false'吗?文本框中的输入是什么? –

+1

你的代码抛出和'InvalidCastException'。查看此异常的堆栈跟踪以了解抛出异常的位置。它可能是'reader.GetInt16(0)'。如果第0列不包含“Int16”又名“short”,则会发生这种情况。 –

+0

@MichaelPerrenoud在我发布的最后一块代码末尾的catch,并且只是说指定的转换是无效的。不,我检查调试值,他们正在得到他们应该输入的值 –

回答

1

数据库列不支持Int16 aka short。这就是为什么我指定的演员不是有效的错误,无论我尝试了什么,都不会离开。感谢您对此事的帮助!这里是进一步说明问题的代码。

using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      reader.Read(); 
      //count = reader.GetInt16(0); needs to be reader.GetInt32(0); 
     } 
相关问题