美其名曰学生管理系统,其实只是个练手的小demo,功能非常残缺……源于学习C#项目连接SQL server时看到的系列视频(BV号BV1zJ411k7cQ)
首先还是先学习最开始想要掌握的知识点,项目连接数据库的操作。
先放上完整代码Dao.cs
namespace SMS
{
class Dao
{
public SqlConnection connection()
{
string str = "Data Source=LAPTOP-TLNMN63C;Initial Catalog=test;Integrated Security=True";
SqlConnection sc = new SqlConnection(str);
sc.Open();//打开数据库连接
return sc;
}
public SqlCommand command(string sql)
{
SqlCommand sc = new SqlCommand(sql, connection());
return sc;
}
//用于delete,update和insert,返回受影响的行数
public int Excute(string sql)
{
return command(sql).ExecuteNonQuery();
}
//用于select,返回SqlDataReader对象,包含select到的数据
public SqlDataReader read(string sql)
{
return command(sql).ExecuteReader();
}
}
}
首先是connection()方法连接数据库,本地的SQLserver使用的是windows账户连接,找到用户名和连接参数赋值。创建SqlConection对象,open打开连接。
command()方法用于将要执行的sql语句传给sc对象。
excute()方法用于delete,update和insert语句,返回受影响的行数。
read()方法用于select查询语句,返回SqlDataReader对象,包含了select到的数据。
功能上也确实没啥可说的,就是简单的增删改查。有一些零碎的小问题需要注意。
1、name = dataGridView1.SelectedCells[1].Value.ToString();语句会报错“索引超出范围。必须为非负值并小于集合大小”?
选择那个单元框就是dataGridview1的属性,找到selectionMode,选择FullRowSelect。这样每次可以直接选中一整行,避免出现取值异常。
2、添加数据后自动刷新表单数据?
添加数据的窗口是form21,学生信息管理窗口是form2,刷新表单数据的函数方法Table()在form2中。
Form2.cs
//添加按钮
private void toolStripButton1_Click(object sender, EventArgs e)
{
Form21 f = new Form21(this);
f.ShowDialog();
}
Form21.cs
Form2 form2;
public Form21(Form2 f)
{
InitializeComponent();
button3.Visible = false;//添加时隐藏“修改”按钮
form2 = f;
}
将form2整个对象作为参数传入form21,在添加和修改的逻辑后增加form2.Table();即可。
(有更好的方法:在后续图书管理系统中再学习记录)
3、DataGridView的属性MultiSelect为false,就可以使得课程只能选择一行,不能选择多行
DataGridView的属性SelectMode为FullRowSelect就可以使得不是选择一个字段,而是选择一整行
RowHeaderVisible改为false,取消最左侧的一栏
4、关于信息修改:
student类使用 update语句对修改的部分进行更新
teacher类使用 先删旧后插新的修改方式
5、关于删除功能:
以删除教师信息为例
private void 删除教师信息ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
string tID = dataGridView1.SelectedCells[0].Value.ToString();
string tName = dataGridView1.SelectedCells[1].Value.ToString();
DialogResult r = MessageBox.Show("确定要删除'" + tName + "'该教师信息吗?", "提示", MessageBoxButtons.OKCancel);
if (r == DialogResult.OK)
{
string sql = "delete from Teacher where Id = '" + tID + "' and Name = '" + tName + "'";
Dao dao = new Dao();
int i = dao.Excute(sql);
if (i > 0)
{
MessageBox.Show("删除成功");
}
}
Table();
}
catch
{
MessageBox.Show("请先选中一行");
}
}
为了避免未选中时点击删除出现异常,使用try catch弹出提示。并在删除前后都弹出提示。
虽然项目非常的基础和简陋,但是还是从头到尾实践了一下C#窗体小项目的完整过程,最重要的是熟悉了一下数据库的交互操作,在其中踩了不少坑,积累了一些小经验,后面继续做一些实践来练习。