c# 循环后完成后 提交全部存储过程

  comStr.Parameters.Add("@StatusID", SqlDbType.Int);
            comStr.Parameters.Add("@IOTime", SqlDbType.DateTime);
            comStr.Parameters.Add("@UniqueId", SqlDbType.BigInt);
            comStr.Parameters.Add("@DataFlag", SqlDbType.VarChar, 50);
        
            foreach (int i in gridView9.GetSelectedRows())
             {
              
                DataRow row = gridView9.GetDataRow(i);
                 string UniqueId = row[2].ToString();
            
                 string IOTime = row[8].ToString();


          
                
                comStr.Parameters["@StatusID"].Value = "256";
                comStr.Parameters["@IOTime"].Value = IOTime;
                comStr.Parameters["@UniqueId"].Value = UniqueId;
                comStr.Parameters["@DataFlag"].Value = "2";

                comStr.ExecuteNonQuery();
                //conStr.Close();//关闭连接

            }

循环添加和提交,怎样实现循环添加 最后一次提交全部呢?

利用事务处理


conStr.Open();        
SqlCommand comStr= conStr.CreateCommand();
SqlTransaction tran = conStr.BeginTransaction();
comStr.Transaction = tran;
comStr.Parameters.Add("@StatusID", SqlDbType.Int);
            comStr.Parameters.Add("@IOTime", SqlDbType.DateTime);
            comStr.Parameters.Add("@UniqueId", SqlDbType.BigInt);
            comStr.Parameters.Add("@DataFlag", SqlDbType.VarChar, 50);
       try
   { 
            foreach (int i in gridView9.GetSelectedRows())
             {
              
                DataRow row = gridView9.GetDataRow(i);
                 string UniqueId = row[2].ToString();
            
                 string IOTime = row[8].ToString();
    
                comStr.Parameters["@StatusID"].Value = "256";
                comStr.Parameters["@IOTime"].Value = IOTime;
                comStr.Parameters["@UniqueId"].Value = UniqueId;
                comStr.Parameters["@DataFlag"].Value = "2";
 
                comStr.ExecuteNonQuery();

            }
  }
catch (SqlException)
   {
     tran.Rollback();
     return;
   }
finally
 {
     conStr.Close();
 }
tran.Commit();

使用事务啊

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using Oracle.DataAccess.Client;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Diagnostics;
using System.Data.Common;
using System.Collections;
namespace DB_Server
{
 
    #region //操作Oracle数据库
    public class OracleDBService
    {
        public OracleDBService(string ConnectionString)
        {
            OracleConStr = ConnectionString;          
        }      
        #region//连接数据库所需变量及方法  
        private string OracleConStr = "";
        private OracleConnection conn;//创建sql连接
        private OracleCommand com;//创建sql命令对象
        private OracleDataReader dr;//创建sql数据阅读器
        private OracleDataAdapter sdr;//创建sql适配器
        private DataSet ds;//创建数据集 
         
 
        /// <summary>
        /// 创建数据库连接并打开
        /// </summary>
        public void open()
        {
            //创建连接
            conn = new OracleConnection(OracleConStr);
            if (conn.State == ConnectionState.Closed)
            {             
                conn.Open();
            }
            else if (conn.State == ConnectionState.Broken)
            {
                conn.Close();
                conn.Open();
            }         
        }
        #region//事务操作数据库
        /// <summary>
        /// 提交一组(多条)SQL语句操作数据库
        /// </summary>
        /// <param name="commandStringList">SQL列表</param>
        /// <returns>执行结果</returns>
        public int UpdateBatchCommand(ArrayList commandStringList)
        {
            open();
            OracleTransaction m_OraTrans = conn.BeginTransaction();//创建事务对象
            com = new OracleCommand();
            com.Connection = conn;
            string tmpStr = "";
            int influenceRowCount = 0;
            try
            {
                foreach (string commandString in commandStringList)
                {
                    tmpStr = commandString;
                    com.CommandText = tmpStr;
                    influenceRowCount += com.ExecuteNonQuery();
                }
                m_OraTrans.Commit();
                return influenceRowCount;
            }
            catch (OracleException ex)
            {
                m_OraTrans.Rollback();
                throw ex;
            }
        }
        #endregion


- 




题主,给你个例子:
一、存储过程

1、表的结构

create Database StudentInfo
use StudentInfo

Create table Student(
Id int PRIMARY key IDENTITY(1,1),
StuNo Nvarchar(50) unique,
Name VARCHAR(200),
)
INSERT INTO Student VALUES('001','张三');
INSERT INTO Student VALUES('002','李四');
INSERT INTO Student VALUES('003','桃五');
INSERT INTO Student VALUES('004','王六');

Create table Course(
Id int PRIMARY key IDENTITY(1,1),
_Id int,
Score VARCHAR(200),
)
INSERT INTO Course VALUES(2,'60');
INSERT INTO Course VALUES(3,'70');
INSERT INTO Course VALUES(4,'80');
[SQL]INSERT INTO Student VALUES('','001','张三')

//[Err] 23000 - [SQL Server]仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'Student'中的标识列指定显式值。
//则去掉给主键的值则应为:
INSERT INTO Student VALUES('001','张三')

2、无参数存储过程

--创建名为 GetStuCou 的无参数存储过程
create procedure GetStuCou
as
begin
    select * 
    from Student s
    left join Course c on s.Id=c._Id
end
--执行名为 GetStuCou 的无参数存储过程
execute GetStuCou

3、有返回值的存储过程(插入数据用的数据库是变得才行 这个例子是固定的执行的时候意义不大)

--创建名为 GetStuCou_Re 的有返回值的存储过程
create procedure GetStuCou_Re
as
begin
    INSERT INTO Course VALUES(1,'80');
    return SCOPE_IDENTITY();        -- 返回为当前表插入数据最后生成的标识值。
end

--执行名为 GetStuCou 的有返回值的存储过程
execute GetStuCou_Re

4、有输入、输出参数的存储过程:

--创建名为 GetStuCou_In 的有输入参数的存储过程
create procedure GetStuCou_In
@StuNo    nvarchar(64)='001'        --设置默认值
as
begin
    select * from Student where StuNo=@StuNo
end

--执行名为 GetStuCou_In 的有输入参数的存储过程(不传参数,即使用默认值)
execute GetStuCou_In

--执行名为 GetStuCou_In 的有输入参数的存储过程(传入参数)
execute GetStuCou_In '004'

5、C#调用存储过程

string strsql = "Data Source=localhost;Initial Catalog=StudentInfo;Integrated Security=True";//数据库链接字符串  
string sql = "GetStuCou_In";//要调用的存储过程名  
SqlConnection conStr = new SqlConnection(strsql);//SQL数据库连接对象,以数据库链接字符串为参数  
SqlCommand comStr = new SqlCommand(sql, conStr);//SQL语句执行对象,第一个参数是要执行的语句,第二个是数据库连接对象  
comStr.CommandType = CommandType.StoredProcedure;//因为要使用的是存储过程,所以设置执行类型为存储过程  
//依次设定存储过程的参数  
comStr.Parameters.Add("@StuNo", SqlDbType.Text).Value = "004";//这里的@StuNo要和定义的参数名字一致
conStr.Open();//打开数据库连接  
//MessageBox.Show(comStr.ExecuteNonQuery().ToString());//执行存储过程  返回影响函数 -1
SqlDataAdapter SqlDataAdapter1 = new SqlDataAdapter(comStr);
DataTable DT = new DataTable();
SqlDataAdapter1.Fill(DT);
MessageBox.Show(DT.Rows[0][0].ToString());
conStr.Close();//关闭连接