C#写QQ通讯录
增删改查功能设计思路:
增加功能:
//获取对应的值
string name = textname.Text;//姓名
string phone = textphone.Text;//手机号
string address = textaddress.Text;//地址
string connStr = "Data Source=花伤情犹在;Initial Catalog=AddressList;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();//打开数据库
if (conn.State == ConnectionState.Open)//如果数据库是打开状态
{
//访问数据
string sql = "insert into Linkinfo values ('"+name+"','"+phone+"','"+address+"')";
SqlCommand command = new SqlCommand(sql,conn);
int num = command.ExecuteNonQuery();
if (num > 0)
{
MessageBox.Show("新增成功");
}
else
{
MessageBox.Show("新增失败");
}
conn.Close();
}
name,phone,address三个变量用于接收(姓名,手机号,地址)
ExecuteNonQuery执行一个SqlCommand,该命令返回受操作影响的行数,,但对于其他操作,如数据库的操作结构,如果返回-1操作成功时,这种情况与我们平常的思维方式有点差距所以应该注意了。
简单意味着使用SQL语句创建数据库、创建数据表等。数据库结构上的某些操作最好不要使用大于0的值来判断操作是否成功。
这里name,phone,address三个变量负责接收了三条数据添加到数据库中,需要注意的是ID文本框其实设置的是禁止输入的,因为在数据库中ID列设为的是主键,属性列里面也要设置标识规范,选择是
属性列 主键下面是添加前与添加后的对比
添加前的数据库执行添加语句:
添加成功
使用查询语句看一下:
哈哈哈已经添加进去
消息返回:1 行受影响(这里1即是返回值)
int num = command.ExecuteNonQuery();
if (num > 0)
{
MessageBox.Show("新增成功");
}
else
{
MessageBox.Show("新增失败");
}
所以这里num等于ExecuteNonQuery()方法的返回值,如果添加成功返回值肯定为1
所以下面的判断语句就是如果num>0则以窗体形式弹出新增成功,否则就是新增失败。
image.png
以上功能都限于文本框和新增按钮
取消
这里的取消按钮还需要添加一些清空文本框的功能:
//清空值
textname.Text = "";
textphone.Text = "";
textaddress.Text = "";
以上就是添加数据的功能
删除功能:
先看一下我设计的删除界面:
//获取对应的值
string id= shanchuid.Text;//ID
string connStr = "Data Source=花伤情犹在;Initial Catalog=AddressList;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();//打开数据库
if (conn.State == ConnectionState.Open)//如果数据库是打开状态
{
//访问数据
string sql = "delete Linkinfo where linkid='"+id+"'";
SqlCommand command = new SqlCommand(sql, conn);
int num = command.ExecuteNonQuery();
if (num > 0)
{
MessageBox.Show("删除成功");
}
else
{
MessageBox.Show("删除失败");
}
conn.Close();
}
string id= shanchuid.Text;(首先获取文本框的ID值,把它赋值给id)
delete Linkinfo where linkid='"+id+"'(这就一条普通的Sql Server删除语句,里面是删除条件,如果条件满足,就会删除那一行的数据,删除条件的参数用id代替)
这样就能实现你想删除哪一行数据就删哪一行
ExecuteNonQuery()方法仍然是像上面添加数据一样的,当你执行删除语句后会有返回值
删除前
删除后会有返回值,因为只删了一行,返回值肯定为1
执行删除语句后
再次查询
查询结果
可以看到刚才那一列已经被删除
所以这段判断语句:
int num = command.ExecuteNonQuery();
if (num > 0)
{
MessageBox.Show("删除成功");
}
else
{
MessageBox.Show("删除失败");
}
conn.Close();
}
如果>0肯定就是执行成功了,这里以窗体形式提醒删除成功
否则就以窗体形式提醒删除失败
以上就是删除功能的实现
修改功能:
还是先看一下我设计的窗体界面:
这里可以看到修改的功能和添加功能几乎都是一样的,但是有一点不同是,修改功能可以输入ID,而添加功能里面ID是不可以输入的,因为系统会默认分配的
//获取对应的值
string id = one.Text;//ID
string name = two.Text;//姓名
string phone = three.Text;//手机号
string address = four.Text;//地址
string connStr = "Data Source=花伤情犹在;Initial Catalog=AddressList;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();//打开数据库
if (conn.State == ConnectionState.Open)//如果数据库是打开状态
{
//访问数据
string sql = string.Format("update Linkinfo set linkname='{0}',linkphone='{1}',address='{2}' where linkid='{3}'",name,phone,address,id);
SqlCommand command = new SqlCommand(sql, conn);
int num = command.ExecuteNonQuery();
if (num > 0)
{
MessageBox.Show("修改成功");
}
else
{
MessageBox.Show("修改失败");
}
conn.Close();
这里id,name,phone,address四个变量负责接收id,姓名,手机号,地址
string sql = string.Format("update Linkinfo set linkname='{0}',linkphone='{1}',address='{2}' where linkid='{3}'",name,phone,address,id);
这个sql语句需要用到string.Format()转义
至于转义的讲解我画了一张图来解释:
int num = command.ExecuteNonQuery();
if (num > 0)
{
MessageBox.Show("修改成功");
}
else
{
MessageBox.Show("修改失败");
}
conn.Close();
这个判断就不多说了,也是ExecuteNonQuery()方法会有返回值,因为你只修改了一行的数据,如果成功肯定返回1,所以条件判断设为大于1就是修改成功,否则就失败。
然后这些功能都限于文本框和修改按钮上
最后要在取消按钮上添加一下清除文本框内容的功能
以上就是修改功能的实现
查询功能:
这个查询功能我直接设计在了主界面
对于这个查询功能我主要用到2种查询方式
【第一种是查询所有数据】
【第二种是模糊查询】
string sousuo = textxm.Text;//文本框输入的内容
string sql;
if (sousuo == "")//如果搜索栏为空
{
sql = "select * from Linkinfo";
}
else
{
sql = string.Format("select * from Linkinfo where linkname like '%{0}%'",sousuo);
}
对于这两种查询方式我做了一个判断,如果文本框里面什么都不输入,那我的sql语句会被赋值为查询所有数据的语句,如果有内容,就会把我的sql语句赋值为模糊搜索
然后就是利用Datareader:
qlDataReader,Read()方法可以读取下一条记录,
利用while循环重复指令,直到全部记录读取完成
SqlDataReader dataReader = command.ExecuteReader();//select ExecuteReader
while (dataReader.Read())//dataReader.Read()==true表示当前下标有记录
{
//遍历数据库内数据
content = content + dataReader["linkid"] + "\t" + "\t" + dataReader["linkname"] + "\t" + "\t" + dataReader["linkphone"] + "\t" + dataReader["address"] + "\r"+"\n";
}
最后把遍历的所有内容输出到主界面TextBox上
输出
TextBox要设置为ReadOnly为True给它设置为只读