执行ADO.NET事务包含四个步骤,接下来以Transaction对象为例介绍。

(1)调用SQLConnection对象的BeginTransaction()方法,创建一个SQLTransaction对象,标志事务开始

(2)将创建的SQLTransaction对象分配给要执行的SqlCommand的Transaction属性。

(3)调用相应的方法执行SQLCommand命令。

(4)调用SQLTransaction的Commit()方法完成事务,或调用Rollback()方法终止事务。

string str = "data source=.;initial catalog=MySchool;uid=sa";
SqlConnection con = new SqlConnection(str);
string sql = "insrt into grad valves(@gname)";
SqlCommand cmd = new SqlCommand(sql, con);
SqlParameter para = new SqlParameter("@gname", textBox1.Text);
SqlTransaction tran = con.BeginTransaction();
cmd.Parameters.Add(para);
con.Open();
cmd.Transaction = tran;
int count = ;
try
{
count = cmd.ExecuteNonQuery();
tran.Commit();
}
catch (Exception ex)
{ tran.Rollback();
MessageBox.Show(ex.Message);
}
if (count > )
{
MessageBox.Show("成功");
}
con.Close();

注意:在调用BeginTransaction()方法开始事务前,要打开数据库连接,否则将出现异常。

    回调函数

  回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

  机制:

  ⑴定义一个回调函数;
  ⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
  ⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
  意义:
  因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法
 
    多张表的数据在同一个DataGridView中展示
  

private void FrmMain_Load(object sender, EventArgs e)
{
List<Entity> list=loagingInfo();
dgvList.DataSource = list;
}
public List<Entity> loagingInfo()
{
List<Entity> stuList = new List<Entity>(); //连接数据库
string str = "Data Source=.;initial catalog=MySchool;user id=sa;pwd=347222";
SqlConnection con = new SqlConnection(str);
string sql = @"select studentname,subjectname,StudentResult,ExamDate
from Student,Subject,Result
where student.StudentNo=Result.StudentNo
and result.SubjectId=Subject.SubjectId";
SqlDataAdapter da = new SqlDataAdapter(sql, con);
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
foreach (DataRow item in dt.Rows)
{
Entity entity = new Entity();
entity.studentName = item["studentname"].ToString();
entity.subjectName = item["subjectname"].ToString();
entity.result = Convert.ToInt32(item["StudentResult"]);
entity.examDate = Convert.ToDateTime(item["ExamDate"]);
stuList.Add(entity);
} return stuList;
}

ADO.NET事务处理,初始回调函数,多张表的数据在同一个DataGridView中展示的更多相关文章

  1. 两种方法将oracle数据库中的一张表的数据导入到另外一个oracle数据库中

    oracle数据库实现一张表的数据导入到另外一个数据库的表中的方法有很多,在这介绍两个. 第一种,把oracle查询的数据导出为sql文件,执行sql文件里的insert语句,如下: 第一步,导出sq ...

  2. Oracle两张表关联批量更新其中一张表的数据

    Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXI ...

  3. 关于跨DB增量(增、改)同步两张表的数据小技巧

    有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB ...

  4. 一条sql解决.一张表的数据复制到另外一张表

    如何把一个表的数组复制到一张表?也许很多人会把这个表查出来的数据再插入到另外一张表里面,这样很麻烦又要写代码逻辑去处理,其实一条sql语句就可以把一张表的数据复制到另外一张表,或者一张表的某一条数据复 ...

  5. 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中

    1.安装所需软件 ①安装java和tomcat,建立JSP网页最基础的软件②安装MySQL数据库(下载地址:https://www.mysql.com/)③安装Navicat Premium来查看数据 ...

  6. 通过mapreduce把mysql的一张表的数据导到另外一张表中

    怎么安装hadoop集群我在这里就不多说了,我这里安装的是三节点的集群 先在主节点安装mysql 启动mysql 登录mysql 创建数据库,创建表格,先把数据加载到表格 t ,表格t2是空的 mys ...

  7. hive sql 查询一张表的数据不在另一张表中

    有时,我们需要对比两张表的数据,找到在其中一张表,不在另一张表中的数据 hql 如下: SELECT * FROM (SELECT id FROM a WHERE dt = '2019-03-17' ...

  8. 【mybatis】mysql级联更新两个表或多张表的数据

    例如 info表和relation表有关联,现在要在一个sql语句中同时级联更新两张表的数据 update security_code_info info LEFT JOIN security_cod ...

  9. 转 A 、B两张表,找出ID字段中,存在A表,但是不存在B表的数据

    A.B两张表,找出ID字段中,存在A表,但是不存在B表的数据,A表总共13W数据,去重后大约3万条数据,B表有2W条数据,且B表的ID有索引. 方法一 使用not in,容易理解,效率低. selec ...

随机推荐

  1. 转载:windows的mysql提权方式

    mysql提权语句归纳如下: 一 UDF提权 这类提权方法我想大家已经知道了,我大致写一下,具体语句如下: create function cmdshell returns string soname ...

  2. 业务对象和BAPI

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. CUBRID学习笔记 45 REPLACE DELETE MERGE 教程

    c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . 过错 ------ 官方文档是英文的, ...

  4. 树--四分树(UVa297)

    郑重声明: 数据结构这部分内容, 由于博主才学很少(且很浅)的内容, 所以现在所写的(大都是抄的)一些典型例题, 再加上一些自己想法和理解而已, 等博主勤加修炼, 以后会大有补充和改进. 粗浅之处, ...

  5. css 背景色渐变---和背景色透明

    1 背景色渐变 background:#fb0000; background: -webkit-gradient(linear, left top, left bottom, color-stop(0 ...

  6. E2 2014.5.8 更新日志

    增加功能 增加报价单功能,可以针对指定客户生成报价单,可以直接生成一个在线地址,直接把地址发给客户在线打开 传统的报价,先生成一个EXCEL,再传给客户,使用E2,这一切都变得简单,你可生成一个在线地 ...

  7. iOS - OC RunLoop 运行循环/消息循环

    1.RunLoop 1)运行循环: 运行循环在 iOS 开发中几乎不用,但是概念的理解却非常重要. 同一个方法中的代码一般都在同一个运行循环中执行,运行循环监听 UI 界面的修改事件,待本次运行循环结 ...

  8. mysql概要(九)字符集和校对集

    1.mysql 字符集有细致设置: 2.mysql字符处理机制是:数据库和客户端之间存在一个字符集转换器(后文简称转换器)将客户端字符编码(必须告诉服务端的)转换成一种中间编码的数据(可自定义的但保证 ...

  9. adb 查看日志信息

    adb logcat 详解  (1) 下面命令将只会显示AndroidRuntime类型的Error消息:         adb  logcat -s AndroidRuntime  (2) 显示全 ...

  10. FragmentPagerAdapter与FragmentStatePagerAdapter区别

    在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动.不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希 ...