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