C#进阶ADO.NET基础三 案例:登录框、导入文档、省市联动

一、ADO.NET基础练习题一:登录案例

if(txtName.Text.Length <=0) //未输入用户名,提示输入
            {
                MessageBox.Show("请输入用户名!");
            }
            else if (txtPsw.Text.Length <= 0) //未输入密码,提示输入
            {
                MessageBox.Show("请输入密码!");
            }
            else
            {
                string sqlSelect = "select * from T_LoginUser where UserName=@name";  //要执行的SQL语句
                //调用SqlHelper类的方法,执行SQL语句,返回一个数据表
                DataTable dt = SqlHelper.ExecuteDataTable(sqlSelect,
                    new SqlParameter("@name", txtName.Text));
                if (dt.Rows.Count <= 0)
                {
                    MessageBox.Show("用户名不存在!");  //提示用户名不存在
                }
                else if (dt.Rows.Count > 1)
                {
                    MessageBox.Show("用户名重名!!!");  //提示重名
                }
                else if(dt.Rows.Count==1)
                {
                    DataRow row = dt.Rows[0];  //得到用户名所在的行
                    string psw = (string)row["Password"]; //获取用户名所在行的密码
                    long Id = (long)row["Id"];  //获取用户名所在行的ID,以便后面调用

                    //判断是否密码错误3次
                    int errorTimes = (int)row["ErrorTimes"];
                    if(errorTimes>=3)
                    {
                        MessageBox.Show("输入错误3次,用户锁定!");
                        return;
                    }

                    if (psw != txtPsw.Text)
                    {
                        string sqlUpdate = "update T_LoginUser set ErrorTimes=ErrorTimes+1 where Id=@id";
                        SqlHelper.ExecuteNonQuery(sqlUpdate,
                            new SqlParameter("@id", Id));
                        MessageBox.Show("密码错误,请重新输入,输错3次将锁定拥护30分钟");
                    }
                    else
                    {
                        MessageBox.Show("登录成功!");
                    }
                }
            }


二、ADO.NET基础练习题2:数据导入导出案例

1、导入文本文件到数据库中

1)将文本文件导入程序中:

OpenFileDialog ofd = new OpenFileDialog();
            ofd.InitialDirectory = @"C:\Users\tufeiax\Desktop";
            ofd.Filter = "文本文件|*.txt|所有文件|*.*";
            ofd.Title = "请选择要导入的文件";
            if (ofd.ShowDialog() != true)
                return;
            string path = ofd.FileName;
            string[] lines = File.ReadAllLines(path,Encoding.Default);
            for (int i = 0; i < lines.Length; i++)
            {
                string[] line = lines[i].Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                string name = line[0];
                string age = line[1];
                //开始调用SqlHelper的静态方法,把数据存入数据库中
            }
        }

2)将程序中读取的内容存入数据库:

string sql = "insert into T_MyUser(Name,Age) values(@name,@age)";
                SqlHelper.ExecuteNonQuery(sql,
                    new SqlParameter("@name", name),
                    new SqlParameter("@age", age));

 

三、ADO.NET基础练习题3:省市县数据库导入并查询

1、导入数据库,用自动创建表,执行SQL语句创建表AreaFull

-- 城市数据库
create table AreaFull
(
	AreaId int identity(1,1) primary key,
	AreaName nvarchar(30) not null,
	AreaPid int not null
);
-- 自动增长不能由我们控制,但是如果设定会话级参数identity_insert就可以了
SET IDENTITY_INSERT AreaFull ON;

然后对应的将省市县内容对应导进去:

insert into AreaFull(AreaId, AreaName, AreaPid) values(18, N'湖南省', 0);
insert into AreaFull(AreaId, AreaName, AreaPid) values(217, N'长沙市', 18);
insert into AreaFull(AreaId, AreaName, AreaPid) values(218, N'株洲市', 18);
insert into AreaFull(AreaId, AreaName, AreaPid) values(2009, N'长沙县', 217);
insert into AreaFull(AreaId, AreaName, AreaPid) values(2010, N'望城县', 217);
insert into AreaFull(AreaId, AreaName, AreaPid) values(2011, N'宁乡县', 217);

2、新建项目,导入之前写好的SqlHelper

主窗口放入3个ListBox,分别命名为:lbProv、lbCity、lbTown。对应接收省、市、县

3、新建一个数据库临时存储类:Area。定义三个属性,用来代表数据库中的三个数据

class Area
    {
        public int AreaId { get; set; }
        public string AreaName { get; set; }
    }

4、在窗口加载时,将省列表内容加载进去:

1)定义一个类型为Area的List集合,用来绑定ListBox的数据

List<Area> listProv = new List<Area>();

2)将省的名字从数据库中读取到缓存表dt中

 string sql = "select * from AreaFull where AreaPid=0";
            DataTable dt = SqlHelper.ExecuteDataTable(sql);

3)逐行读取缓存表dt的内容,放入集合List<Area>中

foreach (DataRow row in dt.Rows)
            {
                Area area = new Area();
                area.AreaId = (int)row["AreaId"];
                area.AreaName = (string)row["AreaName"];
                listProv.Add(area);
            }

4)设置省的ListBox绑定资源为定义好的这个List集合

 lbProv.ItemsSource = listProv;

5)在XAML中设置省的ListBox的显示属性为集合对象的AreaName属性

<ListBox DisplayMemberPath="AreaName" x:Name="lbProv" HorizontalAlignment="Left" Height="238" Margin="10,21,0,0" VerticalAlignment="Top" Width="150"/>


 

5、开始设置市的联动:选择某个省时在第二个ListBox中显示它的市

在省的列表框中注册一个SelectionChanged事件。在里面写上显示第二个列表框内容的代码

过程几乎跟省的一样,只是查询条件稍微改变一下:

private void lbProv_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            List<Area> listCity = new List<Area>();
            //获得lbProv的当前选择项所指向的绑定对象
            Area area = (Area)lbProv.SelectedItem;
            //查询数据库,获取AreaPid=该对象AreaId的行集合
            string sql = "select * from AreaFull where AreaPid=@id";
            DataTable dtCity = SqlHelper.ExecuteDataTable(sql,
                new SqlParameter("@id", area.AreaId));
            foreach (DataRow row in dtCity.Rows)
            {
                Area areaCity = new Area();
                areaCity.AreaId = (int)row["AreaId"];
                areaCity.AreaName = (string)row["AreaName"];
                listCity.Add(areaCity);
            }
            lbCity.ItemsSource = listCity;
        }


最后别忘了在XAML中将列表框的显示内容绑定到类集合

6、县的联动:选择某个市时,在第三个列表框中显示它的县

与市方法一样。

7、调试:因SelectedItem可能为null。会导致程序异常

在Area area = (Area)lbProv.SelectedItem;赋值完成后插入一个判断,如果为null,返回

Area area = (Area)lbProv.SelectedItem;
            if (area == null)
                return;





 






 

 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值