一.创建数据库
用VS 创建数据库的步骤如下:
(1)启动VS ,打开“服务器资源管理器”窗口,右键单击“数据连接”,如图。在弹出的菜单中选择【创建新SQL Server 数据库】选项,弹出“创建新的SQL Server数据库”对话框。
(2)对应项目,系统添加数据库连接。(要是电脑没有sql server,可以选中视图中的sql server资源管理器创建数据库)
(3)创建成功后会有源数据库以及其镜像(我们后续操作都在镜像完成就好)
(4)新建数据库XSCJDB(学生成绩数据库)
![](https://i-blog.csdnimg.cn/blog_migrate/f5be462b6b5fac47aee16c350fb201e9.png)![](https://i-blog.csdnimg.cn/blog_migrate/25ae7e89358fcd79ce77cf24a7c272fb.png)
(5)选中该数据库并创建新表student。
(6)表中插入属性
(7)可右键选中表查看表中数据
二.使用控件实现连接数据库并对其操作
(1)在工具箱中拖出dataGridView控件和botton控件(可以改名是其功能明确)
(2)双击botton1,进入代码编写(检查链接)
// 处理button1的点击事件,测试数据库连接
private void button1_Click(object sender, EventArgs e)
{
// 数据库连接字符串
string strcom = @"your string";
SqlConnection sqlcon;
// 使用using语句自动处理数据库连接的释放
using (sqlcon = new SqlConnection(strcom))
{
// 打开数据库连接
sqlcon.Open();
// 显示数据库连接状态
MessageBox.Show("数据库连接状态" + sqlcon.State.ToString(), "第一个对话框");
}
// 显示数据库连接状态
MessageBox.Show("数据库连接状态" + sqlcon.State.ToString(), "第二个对话框");
}
值得注意的是:数据库链接字符串,先点击XSVJDB
右边的属性列就会有连接字符串
只需选中至字符串出现第一个true;便可正常连接。
(3)双击双击botton2,进入代码编写(插入数据)
// 处理button2的点击事件,插入数据到数据库
private void button2_Click(object sender, EventArgs e)
{
// 数据库连接字符串
string strcom = @"your string";
SqlConnection conn = null;
try
{
// 初始化并打开数据库连接
conn = new SqlConnection(strcom);
conn.Open();
// 创建并配置SqlCommand对象
SqlCommand mycmm = new SqlCommand
{
Connection = conn,
CommandType = CommandType.Text,
CommandText = @"insert into student(Id,name,major,grade,tel) values(@Id,@name,@major,@grade,@tel)"
};
// 添加参数并赋值
mycmm.Parameters.Add(new SqlParameter("@Id", 2022003));
mycmm.Parameters.Add(new SqlParameter("@name", "王五"));
mycmm.Parameters.Add(new SqlParameter("@major", "CS"));
mycmm.Parameters.Add(new SqlParameter("@grade", "40"));
mycmm.Parameters.Add(new SqlParameter("@tel", "1837334"));
// 执行插入命令
int returnvalue = mycmm.ExecuteNonQuery();
// 检查插入是否成功
if (returnvalue != -1)
{
MessageBox.Show("数据插入成功");
}
}
catch (Exception ex)
{
// 处理异常
if (conn != null)
{
MessageBox.Show("数据插入失败" + ex.Message);
}
}
}
(4)双击双击botton3,进入代码编写(查询数据)
// 处理button3的点击事件,从数据库中查询并显示所有数据
private void button3_Click(object sender, EventArgs e)
{
// 数据库连接字符串
string strcom = @"your string";
SqlConnection conn = null;
try
{
// 初始化并打开数据库连接
conn = new SqlConnection(strcom);
conn.Open();
// 创建并配置SqlCommand对象
SqlCommand mycmm = new SqlCommand
{
Connection = conn,
CommandType = CommandType.Text,
CommandText = @"select * from student"
};
// 使用SqlDataAdapter填充DataSet
SqlDataAdapter sda = new SqlDataAdapter(mycmm);
DataSet ds = new DataSet();
sda.Fill(ds, "studentList");
// 显示查询结果到DataGridView
dataGridView2.DataSource = ds.Tables["studentList"].DefaultView;
// 关闭数据库连接
conn.Close();
}
catch (Exception ex)
{
// 处理异常
MessageBox.Show(ex.Message);
if (conn != null)
{
conn.Close();
}
}
}
(5)在设计界面再拖入botton以及一个textbox(用于根据姓名查询)()
(6)编写botton4代码(按名字查询)
// 处理button4的点击事件,根据名字查询数据
private void button4_Click(object sender, EventArgs e)
{
// 数据库连接字符串
string strcon = @"your string";
SqlConnection myConnection = new SqlConnection(strcon);
try
{
// 打开数据库连接
myConnection.Open();
// 创建并配置SqlCommand对象
SqlCommand myCommand = new SqlCommand
{
Connection = myConnection,
CommandType = CommandType.Text,
CommandText = @"select * from student where name =@name"
};
// 添加参数并赋值
myCommand.Parameters.Add(new SqlParameter("@name", textBox1.Text));
// 执行查询命令并检查结果
int res = Convert.ToInt32(myCommand.ExecuteScalar());
if (res == 0)
{
throw new Exception("查无此人");
}
// 使用SqlDataAdapter填充DataSet
SqlDataAdapter sda = new SqlDataAdapter(myCommand);
DataSet ds = new DataSet();
sda.Fill(ds, "xr");
// 显示查询结果到DataGridView
dataGridView2.DataSource = ds.Tables["xr"].DefaultView;
// 关闭数据库连接
myConnection.Close();
}
catch (Exception ex)
{
// 处理异常
MessageBox.Show(ex.ToString());
if (myConnection != null)
{
myConnection.Close();
}
}
}
(7)对于dataGritView的代码
// 保存编辑单元格的原始值
object cellTempValue = null;
// 单元格开始编辑事件
private void dataGridView2_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
// 保存单元格的原始值
cellTempValue = this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}
// 单元格结束编辑事件
private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
// 如果单元格值没有改变,返回
if (object.Equals(cellTempValue, this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value))
{
return;
}
// 弹出确认修改对话框
if (MessageBox.Show("是否确定修改,并更新到数据库", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
{
// 如果取消修改,恢复原值
this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = cellTempValue;
return;
}
// 数据库连接字符串
string strcom = @"your string";
SqlConnection myConnection = new SqlConnection(strcom);
try
{
// 打开数据库连接
myConnection.Open();
// 创建并配置SqlCommand对象
SqlCommand myCommand = new SqlCommand
{
Connection = myConnection,
CommandType = CommandType.Text
};
// 构建更新SQL语句
string strSql = String.Format(
"update student set {0}='{1}' where Id='{2}'",
this.dataGridView2.Columns[e.ColumnIndex].HeaderText, // 当前选择的列名
this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value, // 选中单元格修改后的值
this.dataGridView2.Rows[e.RowIndex].Cells[0].Value // 选中单元格修改前的值
);
// 设置命令文本
myCommand.CommandText = strSql;
// 执行更新命令
int res = myCommand.ExecuteNonQuery();
// 检查更新是否成功
if (res == 0)
{
throw new Exception("修改失败");
}
else
{
MessageBox.Show("修改成功");
}
// 关闭数据库连接
myConnection.Close();
}
catch (Exception ex)
{
// 处理异常
MessageBox.Show(ex.ToString());
if (myConnection != null)
{
myConnection.Close();
}
}
}
(8)对于botton5(删除)
// 处理button5的点击事件,删除数据
private void button5_Click(object sender, EventArgs e)
{
// 数据库连接字符串
string strcom = @"your string;";
SqlConnection myConnection = new SqlConnection(strcom);
try
{
// 打开数据库连接
myConnection.Open();
// 创建并配置SqlCommand对象
SqlCommand myCommand = new SqlCommand
{
Connection = myConnection,
CommandType = CommandType.Text,
CommandText = @"delete from student where name = @name"
};
// 添加参数并赋值
myCommand.Parameters.Add(new SqlParameter("@name", textBox1.Text));
// 执行删除命令
int res = myCommand.ExecuteNonQuery();
// 检查删除是否成功
if (res == 0)
{
MessageBox.Show("删除失败,未找到对应的记录");
}
else
{
MessageBox.Show("删除成功");
// 更新DataGridView显示
button3_Click(sender, e);
}
// 关闭数据库连接
myConnection.Close();
}
catch (Exception ex)
{
// 处理异常
MessageBox.Show("删除失败: " + ex.Message);
if (myConnection != null)
{
myConnection.Close();
}
}
}
三.实现
![](https://i-blog.csdnimg.cn/blog_migrate/5e39de37c4e30b2584aea71ae968b43b.png)
四.小结及易错点
小结
本代码实现了一个简单的Windows Forms应用程序,能够连接本地数据库
XSCJDB
,并进行数据插入、查询和删除操作。主要功能如下:
- 连接数据库:通过点击
button1
,测试与数据库的连接。 - 插入数据:通过点击
button2
,将固定的学生信息插入到数据库的student
表中。 - 查看数据:通过点击
button3
,查询并显示student
表中的所有数据。 - 按姓名查询数据:通过点击
button4
,根据textBox1
中的姓名查询并显示相应的学生数据。 - 删除数据:通过点击
button5
,根据textBox1
中的姓名删除相应的学生记录。
易错点
- 数据库连接字符串错误:- 确保连接字符串正确无误,特别是数据库名称、实例名称等。- 本示例使用的连接字符串为:
@"Data Source = (localdb)\ProjectModels; Initial Catalog = XSCJDB; Integrated Security = True;"
。在实际应用中可能需要调整。 - SQL语句错误:- 确保所有SQL语句正确无误,特别是表名和字段名必须与数据库中定义的一致。- 示例中的表名为
student
,字段名为Id
,name
,major
,grade
,tel
。 - 参数化查询:- 使用参数化查询防止SQL注入攻击。- 在插入、查询和删除操作中,使用
SqlParameter
添加参数,确保安全性。 - 数据库连接管理:- 使用
using
语句或确保在异常情况下正确关闭数据库连接。- 本示例中,所有数据库连接均在try-finally块中管理,确保在异常情况下关闭连接。 - 异常处理:- 捕获并处理所有可能的异常,向用户显示有用的错误信息。- 在示例中,捕获了所有异常并通过
MessageBox
显示错误信息。 - 数据更新和UI同步:- 确保在数据插入、删除或修改后及时更新UI显示。- 在删除操作成功后,通过调用
button3_Click
更新DataGridView
显示。
本文转载自: https://blog.csdn.net/m0_74749240/article/details/139350129
版权归原作者 Spring-wind 所有, 如有侵权,请联系我们删除。
版权归原作者 Spring-wind 所有, 如有侵权,请联系我们删除。