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();//关闭连接