我的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!";
}
}
当然,这是没有异常处理的,您可能会在测试过程中发现它很有用,如果它打算被其他人使用的话。