检查数组C中是否存在int#

时间:2016-02-17 10:03:23

标签: c# arrays

我不知道这是否是正确的方法,但我正在尝试从数据库表中获取所有作业编号,并检查用户输入的内容是否在数据库中。我这样做是通过将所有数据发送到一个数组并检查它是否存在。但是我相信会有一种更简单的方法。这是我到目前为止的代码:

public class IDNo
{
    public int Col1 { get; set; }
}

private void button3_Click(object sender, EventArgs e)
{
    String check = "SELECT * FROM Job";

    using (SqlConnection con = new SqlConnection(str))
    {
        using (SqlCommand cmd = new SqlCommand(check, con))
        {
            con.Open();
            var listOfId = new List<IDNo>();
            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    var id = new IDNo();
                    id.Col1 = Convert.ToInt32(reader["JobNo"]);
                    listOfId.Add(id);
                }
            }

            string JN = textBox10.Text;
            int JoNo = Int32.Parse(JN);

            if (JoNo == IDNo)
            {
                MessageBox.Show("No job number found, please try again!");
            }
            else
            {
                DO SOMETHING HERE WHEN CORRECT
            }
        }
    }
}

我想知道如何检查用户输入的数字是否存在于数组中。

2 个答案:

答案 0 :(得分:1)

数据库引擎应该回答您的问题,而不是简单地回复您的所有工作记录,并强制您的代码通过可能,非常冗长的搜索记录中的匹配数据......

 int JoNo;
 if(!Int32.TryParse(textBox10.Text, out JoNo))
 {
      MessageBox.Show("Not a valid number");
      return;
 }
 String check = @"IF EXISTS( SELECT 1 FROM Job WHERE JobNo=@num) 
                  SELECT 1 ELSE SELECT 0";
 using (SqlConnection con = new SqlConnection(str))
 using (SqlCommand cmd = new SqlCommand(check, con))
 {
     con.Open();
     cmd.Parameters.Add("@num", SqlDbType.Int).Value = JoNo;
     int result = (int)cmd.ExecuteScalar();
     if(result == 0)
          MessageBox.Show("No job number found, please try again!");
     else
          .....
  }

首先,您测试用户输入是否是有效数字而没有抛出异常(Int32.TryParse)但只是告知您的用户错误,然后您构建IF EXISTS查询,因为您只对知道作业号是否存在,您不需要检索该值。最后,执行是使用ExecuteScalar完成的,因为您只对获得单个值1感兴趣(对于现有的JobNo或对于不存在的JobNo而言为0。

答案 1 :(得分:0)

您可以使用用户发送的jobNo作为数据库中搜索查询的输入参数。所以你可以使用查询来完成它:

SqlCommand check = new SqlCommand("SELECT * FROM Job where JobNo = @JobNo" , conn);
check.Parameters.AddWithValue("@JobNo", id.Text);
int exists = (int)check.ExecuteScalar();

if(exists > 0)
{
   //job no exist
}
else
{
   //job no doesn't exist.
}