Вопрос:
Я пытаюсь проверить наличие строки в таблице SQL Server или нет.
Если строка существует (на конкретном TicketID), она должна отображать сообщение, которое вы не можете продолжить дальше, поскольку в базе данных уже есть запись. Но если нет, он должен вставить некоторые записи (на этот конкретный TicketID).
Я попытался попробовать и поймать, но не смог это сделать:
Вот код запроса: (например, ticketID)
bool no; try { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[«ST»].ConnectionString.ToString()); con.Open(); cmd.CommandText = «SELECT EngineerVisited from tblTicketTechnical where TicketID=1»; cmd.Connection = con; rdr = cmd.ExecuteReader(); while (rdr.Read()) { bool = rdr.GetBoolean(0); } con.Close(); } catch { MessageBox.Show(«Cannot continue»); }
Я был бы очень признателен, если бы кто-нибудь мог предложить функцию, которая вернет true, если строка найдена и возвращает false, если это не так.
Лучший ответ:
Вы можете использовать HasRows свойство SQLDataReader.
Ответ №1
Вы должны следовать той же логике в коде, что и логика, которую вы заявляете на английском языке: если там уже есть билет, покажите сообщение, а если нет, вставьте некоторые данные.
var checkQuery = «SELECT COUNT(*) FROM tblTicketTechnical where TicketID=1»; var command = new OleDbCommand(checkQuery, con); con.Open(); int count = (int)command.ExecuteScalar(); if(count > 0) { //Already exists, show message } else { var insertQuery = «INSERT INTO tblTicketTechnical(col1, col2) VALUES(‘val1′, val2’)»; con = new OleDbCommand(insertQuery, con); con.ExecuteNonQuery(); }
Имейте в виду, что это написано из моей головы и не проверено. Я также не выполнял обработку исключений. Это просто показать логику, как вы можете выполнять то, что вы хотите достичь.
Ответ №2
Блок catch будет выполняться только в том случае, если ваш код генерирует exception. Здесь это просто не происходит.
Вместо использования Try/Выгода, if заявления и проверки на результатах запроса.
Ответ №3
Создайте процедуру и код, подобный этому
IF NOT EXISTS (SELECT 1 FROM youtable WHERE id= @id) BEGIN RAISERROR (‘Record Exists’, 16, 2) END ELSE Begin INSERT INTO YOURTABEL(COLUM1,COLUM2) VALUES(VALUE1, VALUE2) END
а затем с помощью try catch вы можете показать сообщение пользователю
Ответ №4
Вы можете использовать свойство DataTableReader.HasRows
The HasRows property returns information about the current result set