2016-02-17 5 views
2

Я не знаю, правильно ли это сделать, но я пытаюсь получить все номера заданий из таблицы базы данных и проверять, что входные данные пользователя находятся в базе данных , Я делаю это, отправляя все данные в массив и проверяя, существует ли он там. Однако я уверен, что будет более простой способ. Это код, который я до сих пор:Проверка наличия int в массиве C#

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

Я бы так же, как некоторая помощь о том, как проверить, если количество вводимого пользователя существует в массиве.

+3

Почему вы не запрашиваете у вас базу данных, если запись с напечатанным заданием номер существует или нет? Они созданы для такого рода задач не только для хранения всех ваших данных задания. – Steve

+0

Почему бы просто не запросить * базу данных * выполнить поиск? ('SELECT * FROM Job, где JobNo = @ JobNo' и добавление '@ JobNo' для вашего объекта команды) –

+0

Если вы собираетесь запрашивать базу данных, почему бы вам просто не отправить SQL-запрос, который вычисляет в одной строке, есть ли запись? Не забудьте параметризовать запрос. – Carlos

ответ

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 [email protected]) 
        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 
      ..... 
    } 

Во-первых, вы проверяете, если пользовательский ввод является допустимым числом без throwning исключений (Int32.TryParse), но просто информируя своего пользователя об ошибке, то вы строите IF EXISTS запрос из-за вам просто интересно узнать, существует ли номер задания или нет, и вам не нужно извлекать это значение. Наконец, выполнение выполняется с использованием ExecuteScalar, потому что вы заинтересованы только в получении единственного значения 1 (для существующего JobNo или 0 для не существующего JobNo.

+0

O h ok, я подставил сейчас. Спасибо, что много помогло и сократило работу. –

0

Вы можете использовать задание, которое отправляется пользователем в качестве входного параметра для вашего поискового запроса в базе данных. Таким образом, вы можете просто сделать это с помощью запроса:

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. 
} 
+0

Итак, как мне это сделать? Как он определяет, что такое @JobNo?, А затем как я могу заставить его сбросить и вернуть ошибку, если она не существует? –

Смежные вопросы