日期:2014-05-17  浏览次数:20464 次

[Access]出现BUG了
请看代码 这是在asp.net 的 C# 代码 目的是为了验证 数据库是否存在已经有的用户名
但我在数据库中录入一条记录后 在网页中验证 还是显示“用户名未被使用”

protected void TextBox_Username_TextChanged(object sender, EventArgs e)
  {
  try
  {
  TextBox_Username.Text = TextBox_Username.Text.Trim();
  Label_SameUsername.Visible = true;
  if (TextBox_Username.Text != "")
  {
  String Sqlstr = null;
  Sqlstr = "SELECT DISTINCT * FROM Account WHERE ACalled=" +
  "'" + TextBox_Username.Text + "'" +
  ";";
  /*Sqlstr = "SELECT Aid FROM Account WHERE ACalled=" +
  "'"+ TextBox_Username.Text + "'" +
  ";";*/
  if (CheckSameValue(Sqlstr))
  {
  Label_SameUsername.Text = "* 用户名已被使用";
  Label_SameUsername.ForeColor = System.Drawing.Color.Red;
  }
  else
  {
  Label_SameUsername.Text = "用户名可以使用";
  Label_SameUsername.ForeColor = System.Drawing.Color.Green;
  }
  }
  else
  {
  Label_SameUsername.Text = "* 用户名不能为空";
  Label_SameUsername.ForeColor = System.Drawing.Color.Red;
  }
  }
  catch (System.Exception ex)
  {
  ErrorMSG.Visible = true;
  Label_ErrorMSG.Text = ex.Message;
  }
  }
  private bool CheckSameValue(String Sqlstr)
  {
  try
  {
  CntStr = ConfigurationManager.AppSettings["AccessDrv"] +
  HttpContext.Current.Server.MapPath("..\\") +
  ConfigurationManager.AppSettings["Database"];
  Cnt = new OleDbConnection(CntStr);
  Cnt.Open();
  Cmd = Cnt.CreateCommand();
  Cmd.CommandText = Sqlstr;
  if (Cmd.ExecuteNonQuery() >= 1)
  {
  return true;
  }
  else
  {
  return false;
  }
  }
  catch (Exception ex)
  {
  throw (ex);
  }
  finally
  {
  Cnt.Close();
  }
  }



/******web.config*******/
<add key="AccessDrv" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source="/>
  <add key="Database" value="App_Data\Database.mdb"/>
/******web.config*******/
我调试了一下看 似乎是 Cmd.ExecuteNonQuery() 这里返回0
但我用SQL执行 的确能查找到一条记录


坐等高手


------解决方案--------------------
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1


而select 查询的话,返回-1
------解决方案--------------------
你要查询怎么能用ExecuteNonQuery呢?应该是ExecuteDataSet,至少是ExecuteReader或者ExecuteScalar吧