C# 无法将参数值从字符串转换为Int32。C

C# 无法将参数值从字符串转换为Int32。C,c#,asp.net,C#,Asp.net,请你帮我翻译下面的C代码。当我使用数值时,代码工作正常,但当我使用K083271这样的值测试代码时,我发现错误: 中发生“System.FormatException”类型的异常 System.Data.dll,但未在用户代码中处理 信息:无法将参数值从字符串转换为字符串 Int32 调试使usercount=0 C代码 using (SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionString

请你帮我翻译下面的C代码。当我使用数值时,代码工作正常,但当我使用K083271这样的值测试代码时,我发现错误:

中发生“System.FormatException”类型的异常 System.Data.dll,但未在用户代码中处理 信息:无法将参数值从字符串转换为字符串 Int32

调试使usercount=0

C代码

using (SqlConnection con = new    SqlConnection(WebConfigurationManager.ConnectionStrings["Molecular"].ConnectionString))
    {
       con.Open();

 using (SqlCommand cmd = new SqlCommand(@"SELECT  count(*)

         from Patient  where MBID = @SearchCriteria ", con))
      {
           cmd.Parameters.Add("@SearchCriteria", SqlDbType.Int).Value= Convert.ToString(txtSearchCriteria.Text);

             DataTable dt = new DataTable();
             SqlDataAdapter da = new SqlDataAdapter(cmd);
             int userCount = (Int32)cmd.ExecuteScalar();
             da.Fill(dt);

          if (userCount > 0)
             {

                 using (SqlCommand cmd4 = new SqlCommand(@"SELECT  *

                        from Patient  where MBID = @SearchCriteria ", con))
                   {
                         int searchcriteria4 = int.Parse(txtSearchCriteria.Text);
                          cmd4.Parameters.AddWithValue("@SearchCriteria", searchcriteria4);
                          DataTable dt4 = new DataTable();
                          SqlDataAdapter da4 = new SqlDataAdapter(cmd4);

                           da4.Fill(dt4);

                                if (da4 != null)
                                {
                                    GridViewClinicalPatientDetails.DataSource = dt4;
                                    GridViewClinicalPatientDetails.DataBind();
                                }
                         }
                            return true;
                        }
           else
              {
                            Response.Write("<script>alert('Patient does not exist. Check Patient MBID')</script>");

                            txtSearchCriteria.Text = "";
                            return false;
              }
        }

在尝试执行查询之前检查用户输入:如果用户输入的内容不是整数,请用诸如“请插入一个数字”之类的内容警告他,然后继续。 您可以使用以下内容:

int idToSearch;
if (!int.TryParse(txtSearchCriteria.Text, out idToSearch)
{
    // warn somehow the user
}
else
{
    //go on with your query, you can safely use idToSearch for you parameter value
    ...
    cmd4.Parameters.AddWithValue("@SearchCriteria", idToSearch);
    ...
}
使用贝洛
命令参数。Add@SearchCriteria, 0;

您是说int searchcriteria4=int.ParsetxtSearchCriteria.Text;?您希望K083271如何解析为整数?提示:你不能,先验证这个文本框,你期待什么?你不能将文字写入整数。当我使用数值时,代码工作因为数值是数值,但非数值是非数值。如果你想把一个字符串解析为一个整数,那么这个字符串需要表示一个整数。我不明白为什么人们会问这个问题,因为它的内容不正确,并且误用了int.parse,如果它有正确的内容,他就不会问这个问题了。错了也没关系。你的问题提得很好,因此我们很快就发现了错误+1@Stavm我认为问题在于OP似乎确切地知道问题是什么:试图将K083271之类的东西解析为int。但是他们给出了任何解释,说明了为什么他们认为这会起作用,或者他们预期会发生什么。还是他们想做更优雅的验证?我们不知道,这基本上使这个问题无法回答