我的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();
我认为这是因为表中没有任何东西,但我不知道为什么它不检查它是否有行并且只是离开。 任何帮助表示赞赏。感谢
答案 0 :(得分:0)
有关此问题的更多信息将非常有用。看起来你出于某种原因正在获得例外(如@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
}
}
看看是否有变化。如果它没有尝试调试,看看它抛出了什么样的异常。
答案 1 :(得分:0)
这是我在登录场景中使用的示例,其中我将用户名存储在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!";
}
}
这当然是无异常处理,您可能会在测试期间发现它有用,并且其他人可以使用它。