SQLite на C#. Запрос на выбор не работает со строкой букв - PullRequest
0 голосов
/ 29 мая 2020

Я изучаю C# с прошлой недели и базы данных за пару дней go, поэтому, если вы видите что-то подозрительное и спрашиваете себя: «Почему он так сделал?», Ответ будет вероятно, это будет «Потому что это все, что я знаю на данный момент».

В названии я сказал «букв», потому что, если я использую строку чисел, это работает.

У меня есть крошечная база данных с тремя столбцами. Id (int), FirstName (текст) и LastName (текст). Идентификатор уникальный, первичный ключ и автоинкременты. FirstName уникален. Эти три не равны нулю. В этой базе данных у меня есть две записи:

Id FirstName LastName

3-6666 2222

4- Test O'Test

Это мой метод:

public static bool isOnDb(string nombre, string apellido)
{
    bool flag = false;
    {
        try
        {
            using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
            {
                string tempName = "Test"; // This is temporarily replacing the argument 'nombre'
                int tempNum= 3; // More testing. See below
                //cnn.Query<Person>($"select * from Person where FirstName = { tempName }", new DynamicParameters());

                // This four lines below are just for testing. They are going to be deleted
                var output = cnn.Query<Person>($"select * from Person where FirstName = { tempName }", new DynamicParameters());
                var person = output.First();
                Console.WriteLine("Funciona");
                Console.WriteLine($"{ person.Id } - { person.FullName }");

                flag = true;
                return flag;
            }
        }
        catch (Exception)
        {
            Console.WriteLine("Derecho a excepcion");

            return flag;
        }
    }
}

В основном, если tempName = "Test", то происходит исключение. Но если tempName = "6666", он возвращает строку. Еще пробовал выбирать по id. Вот почему там tempNum.

int tempNum= 4;
var output = cnn.Query<Person>($"select * from Person where Id = { tempNum }", new DynamicParameters());

1 Ответ

0 голосов
/ 29 мая 2020

В SQLite строки обозначаются символом '', поэтому, когда вы передаете FirstName = { tempName } и его FirstName = Test, он ищет столбец с именем Test in Table person, а не приравнивает его к строке 'Test'

Итак, вы можете сделать:

var output = cnn.Query<Person>($"select * from Person where FirstName = '{ tempName }'");

Или еще лучше:

var people = cnn.Query<Person>("SELECT * FROM PERSON WHERE FirstName = @FirstName", new { FirstName = tempName });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...