MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

C#使用SqlParameter执行多条SQL语句的方法

2024-11-26 20:15 huorong 数据库 6 ℃ 0 评论

使用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

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言