Посмотрите мой C # SQLite Query, что я делаю не так? - PullRequest
0 голосов
/ 05 января 2011

Я пишу приложение базы данных WinForms с использованием SQLite и C #. У меня есть запрос sqlite, который терпит неудачу, и я не уверен, где я ошибаюсь, поскольку я перепробовал все, что мог придумать.

public DataTable searchSubs(String businessName, String contactName)
    {
        string SQL = null;

        if ((businessName != null && businessName != "") && (contactName != null && contactName != ""))
        {
            // provided business name and contact name for search
            SQL = "SELECT * FROM SUBCONTRACTOR WHERE BusinessName LIKE %@BusinessName% AND Contact LIKE %@ContactName%";
        }
        else if ((businessName != null && businessName != "") && (contactName == null || contactName == ""))
        {
            // provided business name only for search
            SQL = "SELECT * FROM SUBCONTRACTOR WHERE BusinessName LIKE %@BusinessName%";
        }
        else if ((businessName == null || businessName == "") && (contactName != null && contactName != ""))
        {
            // provided contact name only for search
            SQL = "SELECT * FROM SUBCONTRACTOR WHERE Contact LIKE %@ContactName%";
        }
        else if ((businessName == null || businessName == "") && (contactName == null || contactName == ""))
        {
            // provided no search information
            SQL = "SELECT * FROM SUBCONTRACTOR";
        }
        SQLiteCommand cmd = new SQLiteCommand(SQL);
        cmd.Parameters.AddWithValue("@BusinessName", businessName);
        cmd.Parameters.AddWithValue("@ContactName", contactName);
        cmd.Connection = connection;
        SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
        DataSet ds = new DataSet();
        try
        {
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            return dt;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
            return null;
        }
        finally
        {
            cmd.Dispose();
            connection.Close();
        }
    }

Я постоянно получаю сообщение о том, что происходит сбой рядом с%. Это все прекрасно и модно, но я предполагаю, что я неправильно это структурирую, но я не знаю где! Я попытался добавить апострофы вокруг «похожих» переменных, например:

SQL = "SELECT * FROM SUBCONTRACTOR WHERE Contact LIKE '%@ContactName%'";

и, честно говоря, это все, что я могу придумать. У кого-нибудь есть идеи?

1 Ответ

2 голосов
/ 05 января 2011

Поскольку вы используете значение параметра, вам не нужно указывать «%».поэтому у вас должно быть что-то вроде

SQL = "SELECT * FROM SUBCONTRACTOR WHERE Contact LIKE @ContactName ";

, необходимо добавить '%' к значению, которое передается параметру

var contactNameSearch = string.Format("{0}%", contactName);<br> cmd.Parameters.AddWithValue("@ContactName", contactNameSearch);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...