#c# #sql #sql-server #winforms
#c# #sql #sql-сервер #winforms
Вопрос:
Я создал программу, которая извлекает соответствующий штат / город из базы данных на основе введенного почтового индекса, но мне нужна помощь с выводом «ошибки», если вводится недействительный, не соответствующий почтовый индекс в виде мира «Неизвестный», помещенного как в состояние, так и в состояние. /метки городов.
Я перепробовал кучу операторов if, но безрезультатно.
private void BtnLookup_Click(object sender, EventArgs e)
{
String cnStr;
SqlConnection cn = new SqlConnection();
cnStr = "Data Source=000.00.000.00;Initial Catalog=. ;User ID=. ;Password=. ";
//Assigns Connection string to the connection object
cn.ConnectionString = cnStr;
//Open the connection to the SQL Server
cn.Open();
//This statement creates the command object and passes in the SQL statement
//then associates the command to the cn connection object
SqlCommand cmd = new SqlCommand("select distinct state, city from tblZipcodes where zip = @ZipCode", cn);
cmd.Parameters.Add(new SqlParameter("@ZipCode", SqlDbType.NVarChar) { Value = txtZip.Text });
SqlDataReader rdrZip = cmd.ExecuteReader();
while (rdrZip.Read())
{
String myString = rdrZip["state"].ToString().Trim();
String myString2 = rdrZip["city"].ToString().Trim();
lblState.Text = myString;
lblCity.Text = myString2;
}
cn.Close();
}
если введен недопустимый почтовый индекс, поместите unknown в метки штата / города
Комментарии:
1. Если ваш запрос не возвращает результатов — вы не войдете в цикл while. Таким образом, вы можете инициализировать метки значением по умолчанию «Неизвестно» в качестве одного из вариантов
2. Вы можете указать встроенную инструкцию if для проверки результатов, если результаты совпадают с неизвестными данными, затем укажите требуемое содержимое для метки.
3. @User46 Используйте LINQ для запроса к базе данных вместо использования SqlCommand. Это было бы намного лучше.
Ответ №1:
Один из вариантов — проверить, возвращает ли ваш запрос результат или нет, используя SqlDataReader .HasRows
Возвращает значение, указывающее, содержит ли SqlDataReader одну или несколько строк.
И вы можете реализовать это следующим образом,
if (rdrZip.HasRows)
{
while (rdrZip.Read())
{
String myString = rdrZip["state"].ToString().Trim();
String myString2 = rdrZip["city"].ToString().Trim();
lblState.Text = myString;
lblCity.Text = myString2;
}
}
else
{
lblState.Text = "Unknown";
lblCity.Text = "Unknown";
}