【发布时间】:2018-10-20 22:47:00
【问题描述】:
我正在尝试制作掷骰子游戏,存储用户/游戏数据等。在这个问题中,我试图查看用户名是否已被使用。但由于某种原因,无论我如何尝试声明我的变量以获取 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) -
我找到了。 "SELECT * FROM Users WHERE USERID = @alias" 您将用户 ID(整数主键)与字符串输入进行比较。如果您具体说明这是编译时错误还是运行时错误,将会有很大帮助:) 我仍然坚持需要重新设计它。
标签: c# sql executescalar