C#.一直报错 select ID from Users where [email protected] 中@user未定义
我是用WPF三层架构实现一个权限分配的界面制作。
这错误尴尬了我一周多时间。
开始一直以为是C#语言特性决定的。明明我的SQL 语句给user赋值过了。它就是检测不到。
附上部分代码如下:
三层中的获取id和删除类的数据访问层:
public int showid(string user)
{
string sql = "select ID from Users where [email protected]";
SqlParameter pms = new SqlParameter("@user", SqlDbType.VarChar,20) { Value = user };
return (int)SqlHelper.ExecuteScalar(sql, CommandType.Text, pms);
}
public bool delete(string user)
{
string sql = "delete from Users where [email protected]";
SqlParameter pms = new SqlParameter("@user", SqlDbType.VarChar,20) { Value = user };
return SqlHelper.ExecuteNonQuery(sql, CommandType.Text, pms) > 0;
}
后台代码中实现选中某一个选项时的响应事件以及删除键点击事件:
private void select(object sender, SelectionChangedEventArgs e)
{
Reset.IsEnabled = true;
delete.IsEnabled = true;
User1Bll bll = new User1Bll();
string User = (string)list1.SelectedItem;
user.Text = User;
int id = bll.showid(User);
password.Text = bll.showpassword(User);
}
private void delete1(object sender, RoutedEventArgs e)
{
User1Bll bll = new User1Bll();
int index = list1.SelectedIndex; //获取当前行的下标为删除做准备
string thing = list1.SelectedItem.ToString();//获取当前选中项内容——即用户名
int id = bll.showid(thing); //根据用户名获取当前用户的id
string delete = bll.showuser(id); //根据用户名获取要删除用户的user
bool delete0 = bll.delete(delete); //删除当前用户
//获取数据库中所有现有用户数据
DataTable dt = new DataTable();
dt = bll.showalluser();
//判断是否删除成功
if (delete0 == true)
{
MessageBox.Show("删除成功!");
list1.Items.Clear();
for (int i = 0; i < bll.shownum(); i++)
list1.Items.Add(dt.Rows[i][0].ToString());
textnum.Text = "共" + bll.shownum().ToString() + "人";
// list1.SelectedIndex = index; //设置删除后默认选中被删除的下一行
}
else
{
MessageBox.Show("删除失败!");
}
else
{
MessageBox.Show("未选中任何行!");
}
}
后来仔细寻找逻辑错误,终于发现了疑点。
就是我的交互逻辑,是在删除了一个选项时,将listbox清空,然后再逐个将数据添加到资源中。但是删除后选中行就默认的变成了 -1 了。所以才会说 user为定义,都没有数据怎么定义啊。所以在select事件中加上一个判断条件即可。判断选中行不为 -1再执行原来的操作。否则不执行操作。代码如下:
private void select(object sender, SelectionChangedEventArgs e)
{
if (list1.SelectedIndex != -1)
{
Reset.IsEnabled = true;
delete.IsEnabled = true;
User1Bll bll = new User1Bll();
string User = (string)list1.SelectedItem;
user.Text = User;
int id = bll.showid(User);
password.Text = bll.showpassword(User);
}
else
{
user.Text = null;
password.Text = null;
}
}