网站首页 > 数据库 / 正文
使用C#向数据库中更新数据时,大家有没有遇到过这类问题了,例如把DataGridView中的数据一次性更新到数据中,使用字符串拼接吧安全性差,使用SqlParameter吧,每次只能更新一行,有没有又安全又快速的方法了。
其实可以使用List<List<SqlParameter>>来解决这个问题,先开启事务等所有提交都完成后再提交事务,如果出错的话则进行回滚。
/// <summary>
/// 根据SQL语句更新数据,开启事务提交多行带参数的数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static int UpdateDB(List<string> sql, List<List<SqlParameter>> param)
{
using (SqlConnection con = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand())
{
int i = 0;
cmd.Connection = con;
con.Open();
try
{
cmd.Transaction = con.BeginTransaction(); //开启事务
foreach (var sp in param)
{
if (sp != null)
{
cmd.CommandText = sql[i].ToString();
cmd.Parameters.AddRange(sp.ToArray());
}
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
i += 1;
}
cmd.Transaction.Commit(); //提交事务
return 0;
}
catch (Exception ex)
{
if (cmd.Transaction != null)
{
cmd.Transaction.Rollback();//回滚事务
}
return -1;
}
finally
{
if (cmd.Transaction != null)
{
cmd.Transaction = null;//释放事务资源
}
con.Close();//关闭连接
}
}
}
}
把DataGridview中的数据保存至数据库中,变量名称定义的很随意,将就看吧,需要注意的是参数名称不能有相同的,但参数名称又在循环中,只能给参数名称加上变量i来实现不重复的效果了。
string s1, s2, s3;
List<List<SqlParameter>> sp1= new List<List<SqlParameter>>(); //参数部分
List<string> sql= new List<string>(); //SQL语句部分
for (int i = 0; i <= DG_show.Rows.Count - 1; i++)
{
s1 = DG_show.Rows[i].Cells["数1"].Value.ToString();
s2= DG_show.Rows[i].Cells["数2"].Value.ToString();
s3 = DG_show.Rows[i].Cells["数3"].Value.ToString();
//安全方法
sql.Add("insert into 举例 (数1,数2,数3) values (@s1"+i.ToString()+ ",@s2"+i.ToString()+ ",@s3"+i.ToString()+") ");
List<SqlParameter> sp = new List<SqlParameter>();
sp.Add(new SqlParameter("@s1" + i.ToString(), s1);
sp.Add(new SqlParameter("@s2" + i.ToString(), s2));
sp.Add(new SqlParameter("@s3" + i.ToString(), s3));
sp1.Add(sp);
}
WJB.UpdateDB(sql,sp1);
MessageBox.Show("数据已经成功保存!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
Tags:oracle pl sql if
猜你喜欢
- 2024-11-26 MS SQL Server——SQL语句导入导出大全
- 2024-11-26 最新!Oracle 20c 新特性详解
- 2024-11-26 一则小故事科普:数据治理到底怎么弄?
- 2024-11-26 SQL注入详解和SQL注入超详细sqlmap使用攻略
- 2024-11-26 一文看懂SqlServer数据库触发器概念、原理及案例
- 2024-11-26 mysql 存储过程总结(二)if语句、参数
- 2024-11-26 无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接口
- 2024-11-26 数据库管理须知!如何快速掌握 SQL Server 中的 IF THEN 逻辑?
- 2024-11-26 每天一个常用MySQL函数-if、isnull、ifnull等
- 2024-11-26 SQL入门基础-如何串联拼接多列的值?