一、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;