2015-06-21 5 views
-1

У меня есть текстовое поле, которое будет вводить данные от пользователя и искать, доступны ли вставленные данные в таблице базы данных SQL или нет. Если данные находятся в таблице, то он обновит два столбца (time_out и day_out) той же строки.
Или иначе появится сообщение об ошибке. Этот код ниже не работает. Пожалуйста помоги.Проверка данных базы данных из текстового поля

try 
{ 

    SqlConnection con3 = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=db-ub;Integrated Security=True"); 
    con3.Open(); 
    SqlCommand cmd2 = new SqlCommand(@"SELECT Count(*) FROM Visitors WHERE [email protected]",con3); 
    cmd2.Parameters.AddWithValue("@id", textBox_VIex.Text); 

    SqlCommand cmd3 = new SqlCommand("UPDATE Visitors SET [email protected],[email protected] WHERE [email protected]", con3); 
    cmd3.Parameters.AddWithValue("@id", 1); 
    cmd3.Parameters.AddWithValue("@dO", DateTime.Now); 
    cmd3.Parameters.AddWithValue("@tO", DateTime.Now); 

    int o = cmd3.ExecuteNonQuery(); 
    MessageBox.Show("Good Bye!"); 
    this.Close(); 
    FormCheck f2 = new FormCheck(); 
    f2.Show(); 
} 
catch 
{ 
    MessageBox.Show("Error!"); 
    textBox_VIex.Clear(); 
} 
+1

Ну, в чем же проблема? – OldProgrammer

+0

Одна проблема, я вижу cmd3.Parameters.AddWithValue («@ id», 1), почему вы все время проходите? – Devesh

+0

Когда вы говорите, что что-то не работает, вам нужно указать, что происходит. Вы получаете сообщение об ошибке? Если вы получаете исключение, добавьте трассировку стека, чтобы мы могли вам помочь :) – Dzyann

ответ

1

Пожалуйста, обратитесь к моим изменения в код,

 int o = cmd3.ExecuteNonQuery(); 

Возвращает количество количество затронутых строк в запросе. Если он равен нулю, это означает, что идентификатор отсутствует в базе данных.

try 
    { 
    SqlConnection con3 = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=db-ub;Integrated Security=True"); 
    con3.Open(); 
    SqlCommand cmd2 = new SqlCommand(@"SELECT Count(*) FROM Visitors WHERE [email protected]",con3); 
    cmd2.Parameters.AddWithValue("@id", textBox_VIex.Text); 

    SqlCommand cmd3 = new SqlCommand("UPDATE Visitors SET [email protected],[email protected] WHERE [email protected]", con3); 
    cmd3.Parameters.AddWithValue("@id", int.Parse(textBox_VIex.Text)); 
    cmd3.Parameters.AddWithValue("@dO", DateTime.Now); 
    cmd3.Parameters.AddWithValue("@tO", DateTime.Now); 

    int o = cmd3.ExecuteNonQuery(); 
    if(o > 0) 
     MessageBox.Show("Good Bye!"); 
    else 
     MessageBox.Show("Error!"); 
     this.Close(); 
     FormCheck f2 = new FormCheck(); 
     f2.Show(); 
    } 
    catch 
    { 
    MessageBox.Show("Error!"); 
    textBox_VIex.Clear(); 
    } 
+0

Спасибо Devesh –

0

Просмотрите комментарии в коде. Во-первых, это хороший способ справиться с подключением и т. Д.

int? result = null; // note nullable int 
try 
{ 
    Using (SqlConnection con = New SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=db-ub;Integrated Security=True")) 
    { 
     con.Open(); 
     // You don't really care to check up front if the record with id=xx exists because 
     // if it doesn't, you get 0 records updated 
     // unless you do something with the result of that query 
     Using (SqlCommandcmd As New SqlCommand("UPDATE Visitors SET [email protected],[email protected] WHERE [email protected]", con)) 
     { 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.AddWithValue("@id", 1); // <<-- Are you always passing "1"????? 
      cmd.Parameters.AddWithValue("@dO", DateTime.Now); 
      cmd.Parameters.AddWithValue("@tO", DateTime.Now);   

      result = cmd.ExecuteNonQuery(); 
     } 

     con.Close() 
    } 
} 
catch 
{ 
    // optionally, log error or show error msg in second msgBox below. Save it to a variable here 
} 

// Separate query and result processing 

// Check the result. If result is still null, your query failed. If not 0 - you updated your records 
if (result != null && (int)result > 0) 
{ 
    MessageBox.Show("Updated record OK"); 
} 
else 
{ 
    if (result == null) 
    { 
     MessageBox.Show("The construct failed"); // optionally add error msg here 
    } 
    else 
    { 
     MessageBox.Show("The record I was looking for is not in DB"); 
    } 
}  
// I don't know what you do with your form logic 
this.Close(); 
Смежные вопросы