【问题标题】:Checking if int exists in array C#检查数组C#中是否存在int
【发布时间】:2016-05-28 23:11:40
【问题描述】:

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

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
            }
        }
    }
}

我想要一些关于如何检查用户输入的数字是否存在于数组中的帮助。

【问题讨论】:

  • 你为什么不询问你的数据库是否存在具有键入的工作编号的记录?它们是为此类任务而设计的,而不仅仅是保存您的所有工作数据
  • 为什么不直接让数据库进行搜索呢? (SELECT * FROM Job where JobNo = @JobNo 并将@JobNo 参数添加到您的命令对象)
  • 如果您要查询数据库,为什么不直接发送一条 SQL 查询,在一行中确定条目是否存在?记得参数化查询。

标签: c# arrays


【解决方案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 查询,因为您只是想知道该作业是否number 存在与否,您不需要检索该值。最后,使用ExecuteScalar 完成执行,因为您只对获取单个值 1 感兴趣(对于现有的 JobNo 或 0 对于不存在的 JobNo。

【讨论】:

  • 哦,好吧,我明白了。谢谢,这帮了很多忙,减少了很多工作。
【解决方案2】:

您可以使用用户发送的 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.
}

【讨论】:

  • 那么我该怎么做呢?就像它如何定义 @JobNo 是什么?如果它不存在,我该如何让它抛出并返回错误?
猜你喜欢
  • 2021-04-03
  • 2021-07-17
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
相关资源
最近更新 更多