日期:2014-05-18  浏览次数:20420 次

没有返回值
public static bool login(M_Userinfo user)
  {
  string sql = "select * from userinfo where (user_name=@user_name) and(user_password=@user_password)";
  //string sql = "insert into userinfo(user_name,user_password) values (@user_name,@user_password)";
  Dictionary<string,object> dic=new Dictionary<string,object>();
  dic.Add("@user_name",user.User_name);
  dic.Add("@user_password",user.User_password);
  return DBHelper.ExecuteNonQuery(sql,dic)>0 ? true:false ;
  }
insert 语句能返回,select语句没有返回。是不是SQL语句有问题?where里面用'''+@user_name+'''吗?

------解决方案--------------------
命令对象的ExecuteNonQuery()方法用于执行任何不从数据库返回结果集的SQL操作命令,包括INSERT INTO、UPDATE、DELETE语句、没有返回数值的存储过程、CREATE TABLE和CREATEINDEX之类的DDL语句。ExecuteNonQuery方法还可用来执行目录操作,例如查询数据库的结构或创建诸如表等的 数据库对象。ExecuteNonQuery方法对于UPDATE、INSERT INTO和DELETE这些操作语句,其返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,返回值也为-1。

------解决方案--------------------
ExecuteNonQuery一般用插入删除更新,你读取数据用ExecuteReder吧,
还有你的字符串最好这么写,string sql=@"字符串";
------解决方案--------------------
探讨

用GetReader啦,最后这样写成这样。

dic.Add("@user_name",user.User_name);
dic.Add("@user_password",user.User_password);
DbDataReader dr= DBHelper.GetReader(sql, dic);
bool bl = dr.HasRows;
return bl;
……

------解决方案--------------------
探讨

解决啦,不过这样也有问题,如果用查询语句取数据时,要是模糊查询怎么办呀,又不能写成 LIKE '"+@XXX+"'

------解决方案--------------------
string sql = "select * from userinfo where (user_name='"+@user_name+"') and(user_password='"+@user_password+"')";


这样就对了
------解决方案--------------------
你打开那个DBHelper看一下是怎么封装的。估计是用了SqlParameter而不是拼接字符串,所以user_name='" + @user_name,加上引号就错了。
LIKE的话需要加上百分号的: select * from abc where a like 'ab%'
------解决方案--------------------
探讨

我试过啦,LIKE @xxx什么也查不到

------解决方案--------------------
如果你是想根据关键字搜索的话应该这样写
string sql="select * from 表名 where 列名 like '%"+传过来的参数+"%'"