分配SQL读取器会留下代码



我的c#代码有问题。我试图检查用户名是否已经存在,因此我有一个select语句,但当我中断它时,它会在我分配读卡器后立即离开代码。这是我的代码:

SqlConnection conn = new SqlConnection(Properties.Settings.Default.CategoriesConnectionString);
SqlCommand chkUser = new SqlCommand("SELECT [Username] FROM [Accounts] WHERE [Username] = @username", conn);
chkUser.Parameters.AddWithValue("@username", txtUsername.Text);
conn.Open();
SqlDataReader sqlReader = chkUser.ExecuteReader(); //leaves code right here

if (sqlReader.HasRows)
{
    MessageBox.Show("That username already exists.  Please choose another.");
    txtUsername.Focus();
    return;
}
conn.Close();

我想这是因为表中什么都没有,但我不知道为什么它不检查是否有行,而只是离开。感谢您的帮助。感谢

关于这个问题的更多信息会很有用。似乎你因为某种原因(正如@Guffa所说)遇到了异常,如果没有任何进一步的细节,很难猜测原因是什么。试着将你发布的代码更改为以下代码:

using(SqlConnection conn = new SqlConnection(Properties.Settings.Default.CategoriesConnectionString))
using(SqlCommand chkUser = new SqlCommand("SELECT [Username] FROM [Accounts] WHERE [Username] = @username", conn))
{
  chkUser.Parameters.AddWithValue("@username", txtUsername.Text);
  try
  {
    conn.Open();
    using(SqlDataReader sqlReader = chkUser.ExecuteReader()) 
    {
      if (sqlReader.HasRows)
      {
        MessageBox.Show("That username already exists.  Please choose another.");
        txtUsername.Focus();
        return;
      }
    }
  }
  catch(Exception e)
  {
    // manage exception  
  }
}

看看有没有什么变化。如果它不尝试调试并查看它抛出的异常类型。

以下是我在登录场景中使用的一个示例,其中我将用户名存储在mysql数据库表中。尽管我使用MySQL,但应该没有太大区别。(但不确定)。

public static string CheckUsername()
{
  bool usernameCheck = false;
  InitiateDatabase();//contains the root.Connection string
  MySqlCommand readCommand = rootConnection.CreateCommand();
  readCommand.CommandText = String.Format("SELECT username FROM `SCHEMA`.`USERTABLE`");
  rootConnection.Open();
  MySqlDataReader Reader = readCommand.ExecuteReader();
  while (Reader.Read())
  {
    for (int i = 0; i < Reader.FieldCount; i++)
    {
      if (Reader.GetValue(i).ToString() == USERNAME_STRING)
      {
        usernameCheck = true;
      }
    }
  }
  rootConnection.Close();
  if (usernameCheck)
  {
    return "Succes";
  }
  else
  {
    return "Wrong Username!";
  }
}

当然,这是没有异常处理的,您可能会在测试过程中发现它很有用,如果它打算被其他人使用的话。

相关内容

  • 没有找到相关文章

最新更新