Я пытаюсь создать игру в кости, хранить данные о пользователях/игре и т. д. В этой задаче я пытаюсь проверить, занято ли уже имя пользователя. Но по какой-то причине, независимо от того, как я пытаюсь объявить свою переменную для получения результата ExecuteScalar(), я всегда получаю сообщение об ошибке «Невозможно преобразовать из nVarChar в int».
private bool CheckForUser()
{
//returns true if Username is already registered
SqlConnection connection = new SqlConnection("...");
string query = "SELECT * FROM Users WHERE USERID = @alias";
SqlCommand cmd = new SqlCommand(query, connection);
cmd.Parameters.AddWithValue("@alias", tbNewUsername.Text);
connection.Open();
Object DbResult = cmd.ExecuteScalar(); //<-ERROR
connection.Close();
DbResult = (DbResult == DBNull.Value) ? null : DbResult;
if (DbResult != null)
return true;
else
return false;
}
Это была моя последняя попытка перед поиском помощи. Приведение к типу int не работает, строка не работает, а объявление DbResult как объекта не работает. Я понимаю, почему его нельзя преобразовать в int, но я не знаю, почему он продолжает попытки.
Спасибо за любую помощь.
string
параметру сAddWithValue
, который предполагает, что параметр являетсяNVARCHAR
, когда он должен бытьint
(согласноUSERID
). Используйтеcmd.Parameters.Add("alias", DbType.Int32).Value = tbNewUsername.Text;
(или что-то подобное, у меня нет открытого VS) - person Camilo Terevinto   schedule 21.10.2018