我有一张电影评论表:
MovieID UserID Rating
72 64817 5
238 4984 4
167 48176 2
37 19841 1
122 987981 2
48 and so on....
129
143
27
177
47
201
220
12
247
如果我指定了特定的movieID,我知道如何显示评定该电影的所有用户ID及其评级。
我的问题:如果没有任何用户提交评论,我该如何显示这样的消息?如果没有评论,我该如何捕捉这个特征?我尝试了很多东西(在C#中使用GUI):
sql = string.Format("SELECT COUNT(1) AS num
FROM Reviews
WHERE MovieID = '{0}'", textBox1.Text);
cmd = new SqlCommand();
cmd.Connection = db;
cmd.CommandText = sql;
object result = cmd.ExecuteScalar();
int numReviews = System.Convert.ToInt32(result);
if (numReviews == 0)
{
MessageBox.Show("No reviews");
}
else
{
//I display them. Got this part
}
如果结果应该是一个数字(count(1)),为什么我不能分配一个整数变量并测试它?
当我调试此代码时,出现错误异常:
转换varchar值时转换失败' NewMovieNoReview'数据类型int。
在这一行
result = cmd.ExecuteScalar();
更新:傻错!!打印字符串中的内容后,MovieID = NewMovieNoReview而不是ID!感谢Erik"在调用String.Format()后,检查sql中的内容"! 已解决
答案 0 :(得分:2)
错误
')附近的语法错误。
。
是SQL抱怨SQL命令的语法。
尝试
SELECT COUNT(1) AS num FROM Reviews WHERE MovieID = {0}
注意:如果MovieID是整数,则{0}附近没有单引号。
转换varchar值时转换失败' NewMovieNoReview'数据类型int。
您没有收到int
结果,因为执行SQL语句时出错。
注:
您应该使用parameterized query,而不是信任textBox1.Text
中的任何输入。否则,普通用户可以进入该文本框;DELETE TABLE Reviews
。