【问题标题】:Int.TryParse not resolving specified cast is not valid errorInt.TryParse 未解析指定的强制转换无效错误
【发布时间】:2013-11-14 14:28:42
【问题描述】:

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

下面我提供了带有值的 Int.TryParse 方法。我正在调用以检查用户输入的方法当前不在数据库中,而我的 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;
        }

【问题讨论】:

  • 哪一行抛出错误,错误是什么? int.TryParse 是否返回 false?文本框的输入是什么?
  • 你的代码抛出和InvalidCastException。查看此异常的堆栈跟踪以了解异常被抛出的位置。可能是reader.GetInt16(0)。如果第 0 列不包含 Int16 aka short,则会发生这种情况。
  • @MichaelPerrenoud 在我发布的最后一个代码块的结尾处捕获,只是说指定的演员表无效。不,我检查了调试中的值,他们正在获取应有的输入值
  • @MartinLiversage 好的,我会的!
  • @MartinLiversage 我不确定如何阅读,但我看到很多 Int32 而没有 Int16

标签: c# parsing


【解决方案1】:

数据库列不支持 Int16 aka short。这就是为什么我指定的演员表无效的原因,无论我尝试什么,错误都不会消失。感谢您在这件事上的帮助!这是进一步说明问题所在的代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    相关资源
    最近更新 更多