Я работаю над переносом проекта, который использовал базу данных 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).
Спасибо за вашу помощь!