C#.一直报错 select ID from Users where username=@user 中@user未定义

我是用WPF三层架构实现一个权限分配的界面制作。


这错误尴尬了我一周多时间。

开始一直以为是C#语言特性决定的。明明我的SQL 语句给user赋值过了。它就是检测不到。

附上部分代码如下:

三层中的获取id和删除类的数据访问层:

 public int showid(string user)
        {
            string sql = "select ID from Users where username=@user";
            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 username=@user";
            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;
            }
        }

然后就搞定了  ~~~
        


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值