У меня есть программа ac #, которая ищет таблицу по вводу пользователя.
Ключевые слова разделяются пробелом и сохраняются в массив.
Тогда оператор switch выберет правильный регистр на основе ввода только одного слова или двух слов.
Мой оператор switch заполняет мою таблицу данных только для первого случая, но при попытке использовать второй случай моя программа переходит к исключению catch.
Я пытался отладить, но вижу только то, что при вводеслучай 2, он не выходит за пределы sda1.Fill(dt1);
Обновленный код:
static string myconnstr = ConfigurationManager.ConnectionStrings["connstrng"].ConnectionString;
private void btnSearch_Click(object sender, EventArgs e)
{
//Get the value from textbox
string keyword = txtboxKeyword.Text;
string[] words = keyword.Split(' ');
//SQL Connection
var conn = new SqlConnection(myconnstr);
try
{
switch (words.Length)
{
case 1:
//Declare Command object with parameter
SqlCommand cmd = new SqlCommand("SELECT Site, StreetAddress, City, State, Zip, PharmacyPhone, MDVersion, InstallDate, SiteCodes, SiteNotActive, CloseDate, SiteNotes " +
"FROM Sites WHERE contains(site, @words0) OR contains (StreetAddress, @words0) OR contains(city, @words0)", conn);
cmd.Parameters.AddWithValue("@words0", words[0]);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridSites.ReadOnly = true;
dataGridSites.DataSource = dt;
dataGridSites.CurrentCell = null;
break;
case 2:
//Declare Command object with parameter
SqlCommand cmd1 = new SqlCommand("SELECT Site, StreetAddress, City, State, Zip, PharmacyPhone, MDVersion, InstallDate, SiteCodes, SiteNotActive, CloseDate, SiteNotes " +
"FROM Sites WHERE contains(site, @words0, @words1) OR contains (StreetAddress, @words0, @words1) OR contains(city, @words0, @words1)", conn);
cmd1.Parameters.AddWithValue("@words0", words[0]);
cmd1.Parameters.AddWithValue("@words1", words[1]);
SqlDataAdapter sda1 = new SqlDataAdapter(cmd1);
DataTable dt1 = new DataTable();
sda1.Fill(dt1);
dataGridSites.ReadOnly = true;
dataGridSites.DataSource = dt1;
dataGridSites.CurrentCell = null;
break;
}
}
catch (Exception)
{
MessageBox.Show("Search cannot be blank.");
}
}
Вот обновленная ошибка исключения, которую я получаю:
System.Data.SqlClient.SqlException (0x80131904): неправильный синтаксис рядом с '@ words1'.Номер ошибки: 102, состояние: 1, класс: 15