SELECT COUNT (*) Думает, что параметр String является IEnumerable - возвращает массив? (CockroachDB C #) - PullRequest
1 голос
/ 02 июня 2019

Я работаю над переносом проекта, который использовал базу данных MySQL, на CockroachDB. В этом запросе я просто пытаюсь увидеть, существует ли имя пользователя в таблице учетных записей. Когда я выполняю тот же запрос в CLI, он возвращает количество 1.

Я пытаюсь получить это целое число в моем приложении на C #, однако я не совсем понимаю проблему с добавлением параметра в свой запрос. Если в моем запросе SELECT COUNT (*) есть строковый параметр, кажется, что эта строка является IEnumerable?

public bool accExists(string id, string userName)
{
    int totalCount = 0;

    using (var conn = new NpgsqlConnection(connstr.getConnStr(id)))
    {
        //SSL Connection Init
        conn.ProvideClientCertificatesCallback += ProvideClientCertificatesCallback;
        conn.UserCertificateValidationCallback += UserCertificateValidationCallback;

        conn.Open();

        // Check if Account Exists
        NpgsqlCommand accExists = new NpgsqlCommand("SELECT COUNT(*) FROM accounts WHERE username LIKE @username", conn);
        accExists.Parameters.AddWithValue("@username", userName);

        // Query Executions:
        totalCount = Convert.ToInt32(accExists.ExecuteScalar());
    }

    // Return Value
    switch (totalCount)
    {
        case 1: // Account Exists
            return true;

        case 0: // Account Does NOT Exist
            return false;

        default: // Protective Code - Shouldn't be hit
            addManageLog("SYSTEM", id, "MORE THAN ONE OF THE SAME USERNAME " + userName);
            return false;
    }
}

Исключение:

System.NotSupportedException: в Npgsql 3.x удалена поддержка записи параметра со значением IEnumerable, вместо него используйте .ToList () /. ToArray () '

РЕДАКТИРОВАТЬ: Я также попытался изменить строку параметра на:

accExists.Parameters.AddWithValue("@username", NpgsqlTypes.NpgsqlDbType.Varchar, userName);

для явного определения типа параметра, поскольку кажется, что это значение IEnumerable. Однако это возвращает исключение:

NpgsqlDbType 'Varchar' отсутствует в вашей базе данных.

Столбец имени пользователя в моей базе данных установлен как VARCHAR (50).

Спасибо за вашу помощь!

...