2013-11-14 28 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); 
     } 
相關問題