一、SqlDataReader

SqlConnection conn = new SqlConnection("server=10.126.64.11;user=it_oper;pwd=IT@SME2018;database=MESOtheata;");
conn.Open();
SqlCommand cmd = new SqlCommand("select * from [A_Emp_Dept_20190522]", conn);// 或者
//或者 SqlCommand cmd=conn.CreateCommand();cmd.CommandText="";
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);//读取完毕自动关闭连接
for (int i = 0; i < reader.FieldCount - 1; i++)
{
Console.WriteLine(reader.GetName(i));//获取字段名
while (reader.Read())//或者使用reader.HasRows属性判断时候有记录
{
Console.WriteLine(reader.GetDateTime(0).ToString());
//或者 Console.WriteLine(Convert.ToDateTime(reader[0]).ToString());
object[] values = new object[reader.FieldCount - 1];
reader.GetValues(values);//读取一行所有字段的内容到Values字段中
if (reader.IsDBNull(0)
{
//判断某字段是否为null值。
}
} }
reader.Close();
//系统未关闭时,本Command更改CommandText后或新建Command还有继续使用此连接。
//conn.Close();

二、参数化查询

1、使用SQLClient:

SqlCommand cmd = new SqlCommand("select * from [A_Emp_Dept_20190522] where  empname=@empname", conn);
SqlParameter para = new SqlParameter("@empname", SqlDbType.NVarChar, 10);
para.Value = "曾亮";
cmd.Parameters.Add(para);
//或者直接 cmd.Parameters.AddWithValue("@empname","曾亮");

2、使用OleDb:

OleDbCommand cmd = new OleDbCommand("select * from [A_Emp_Dept_20190522] where  empname like ?  and line like ?", conn);
cmd.Parameters.AddWithValue("@empname", "曾亮");
cmd.Parameters.AddWithValue("@line", "ODMZ%");//参加的参数的顺序应与?号的顺序相同,参数名可随意执行,甚至可以是空串。

三、执行无返回值的查询:cmd.ExecuteNonQuery()

SqlCommand cmd = new SqlCommand("update  [A_Emp_Dept_20190522] set dept='aa' where  dept='' ", conn);
int RecordAffected = cmd.ExecuteNonQuery();
if (RecordAffected == 0)
{
Console.Write("操作失败");
}

四、执行返回单值的查询:cmd.ExecuteScalar()

SqlCommand cmd = new SqlCommand("select count(*) from   [A_Emp_Dept_20190522] ", conn);
if (Convert.ToInt32(cmd.ExecuteScalar()) == 0)//无记录,返回null
{
Console.Write("无记录");
}

五、使用Transaction事务

SqlTransaction trans = null;
try
{
trans = conn.BeginTransaction();//默认事务隔离级别为ISolationLevel.Serilizable,Oracle为ISolationLevel.ReadCommited
SqlCommand cmd = new SqlCommand("Insert int **", conn);
cmd.Transaction = trans;//为命令指定一个事务
cmd.ExecuteNonQuery();
//可以有多个SqlCommand一并执行,一起提交或回滚
trans.Commit();
}
catch
{
trans.Rollback();
}

Transaction事务隔离级别:

六、调用存储过程

SqlCommand cmd = new SqlCommand("GetCustomer", conn);
cmd.CommandType = CommandType.StoredProcedure; SqlParameter para1 = new SqlParameter("@CustomerID", SqlDbType.NChar, 10);
para1.Value = "UINET";
cmd.Parameters.Add(para1); SqlParameter para2 = new SqlParameter("@CompanyName", SqlDbType.NVarChar, 30);
para2.Direction = ParameterDirection.Output;
cmd.Parameters.Add(para2); cmd.ExecuteNonQuery();
Console.WriteLine(cmd.Parameters["@CompanyName"].Value);

七、使用DataReader获取数据库模式信息

SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly);//仅仅读取模式信息
DataTable table = reader.GetSchemaTable();
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Console.WriteLine(col.ColumnName + row[col.ColumnName]);
}
}

八、浏览多个结果集

SqlCommand cmd = new SqlCommand("select * from Catogories;select * from Customers", conn);

SqlDataReader reader = cmd.ExecuteReader();//仅仅读取模式信息
DataTable table = reader.GetSchemaTable();
do//首先自动定位在第一个结果集上
{
while (reader.Read())
{
Console.Write(reader[0]);
}
} while (reader.NextResult());

九、DbDataReader类

从数据源中读取行的只进流,包含SqlDataReader ,OleDbDataReader ,OdbcDataReader ,实现了IDataReader IDataRecord 接口

  • 属性

    IsClosed    获取一个值,该值指示数据读取器是否已关闭。
    FieldCount    获取当前行中的列数。
    Item[Int32]    获取位于指定索引处的列。
    Item[String]    获取具有指定名称的列。
  • 方法

    Close()    关闭 IDataReader 对象。
    GetSchemaTable()    返回一个 DataTable,它描述 IDataReader 的列元数据。
    NextResult()    在读取一批 SQL 语句的结果时,使数据读取器前进到下一个结果。
    Read()    让 IDataReader 前进到下一条记录。
    Get***(Int32)    获取指定列的值。
    GetValues(Object[])    使用当前记录的列值填充对象的数组。
    IsDBNull(Int32)    返回指定字段是否设置为 null。

十、其他

SQLCommand命令、DbTransaction事务的更多相关文章

  1. 假设分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化

    {System.InvalidOperationException: 假设分配给命令的连接位于本地挂起事务中.ExecuteReader 要求命令拥有事务.命令的 Transaction 属性尚未初始 ...

  2. 007-Redi-命令-脚本命令、链接命令、服务器命令、事务、HyperLogLog

    Redis 脚本命令 下表列出了 redis 脚本常用命令: 序号 命令及描述 1 EVAL script numkeys key [key ...] arg [arg ...] 执行 Lua 脚本. ...

  3. SqlCommand对象-Transaction事务的使用

    using (SqlConnection connection = new SqlConnection(connStr)) { SqlCommand sqlcmd = new SqlCommand() ...

  4. 如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化

    DbConnection dbc = database.CreateConnection(); DbTransaction dbtt = null; try { dbc.Open(); dbtt = ...

  5. 积累——SQLCommand命令

    SQLcommand表示要对SQL数据库运行的一个 T-SQL 语句或存储过程.以便运行大量操作或处理数据库结构. 在对数据库訪问的时候,就经经常使用到这个.看看它是怎么做到的吧! 一.属性 Comm ...

  6. 万字长文入门 Redis 命令、事务、锁、订阅、性能测试

    作者:痴者工良 Redis 基本数据类型 Redis 中,常用的数据类型有以下几种: String:字符串类型,二进制安全字符串: Hash:哈希表: List 列表:链表结构,按照插入顺序排序的字符 ...

  7. TCL命令(事务控制)

     确认提交DML操作:commit;     撤销DML操作:rollback;         提示:rollback撤销的是与上一个commit之间          所做的DML操作.注意:仅对 ...

  8. 第四章· Redis的事务、锁及管理命令

    一.事务介绍 二.Redis乐观锁介绍 三.Redis管理命令 一.事务介绍 Redis的事务与关系型数据库中的事务区别 1)在MySQL中讲过的事务,具有A.C.I.D四个特性 Atomic(原子性 ...

  9. 8、redis之事务1-redis命令

    一.概述:      和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石.相信对有 ...

随机推荐

  1. sql语句中,取得schema中的所有表信息及表的定义结构

    postgressql下'検索スキーマの中で.全てテーブルselect tablename from pg_tables where schemaname='test' mysql下'検索スキーマの中 ...

  2. 99%的人都理解错了GET与POST的区别

    原文链接:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3 ...

  3. element form 校验数组每一项

    1.校验的数据结构如下: 2.html结构 <el-dialog :title="title" :visible.sync="visable" width ...

  4. 路由器02---PandoraBox配置

    1.安装libc 什么是libc,这里贴一个gnu官方的解释 Any Unix-like operating system needs a C library: the library which d ...

  5. oracle数据库与其他数据库区别

    本文用的是Oracle 10g数据库,利用PL/SQL Developer的集成开发环境(安装可以自行百度) Oracle数据库  ---> 数据库实例  --->  表空间(逻辑单位)( ...

  6. time() 函数时间不同步问题

    1.时区设置问题 处理方法:编辑php.ini  搜索 “timezone” 改写为 PRC 时区 2.服务器时间不同步 处理方法:设置服务器时间和本地时间进行同步

  7. Solr介绍 入门练习

    1.1 Solr是什么 Solr是一个基于全文检索的企业级应用服务器. 全文检索:可以输入一段文字,通过分词检索数据!!(复习) 应用服务器:它是单独的服务. 1.2 Solr能做什么 它就是用于做全 ...

  8. 面试经典算法:快速排序Golang实现

    Golang快速排序 定义 快速排序由C. A. R. Hoare在1962年提出.快速排序是对冒泡排序的一种改进,采用了一种分治的策略. 基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中 ...

  9. IDEA如何本机调试springboot应用打的jar包

    背景: 我用命名行 执行 java -jar  ***.jar发现 springboot启动时抛出错误,因此想debug进去看看究竟为什么出错. 1  在命令行执行 java -jar -Xdebug ...

  10. Visual Studio 2017修改编码UTF-8

    转载自:https://blog.csdn.net/qq_36848370/article/details/82597157 VS 2017隐藏了高级保存功能,导致没办法直接去设置代码编码 UTF-8 ...