C#中存储过程和DataTable的应用
存储过程p_OperatorDetails,有四个参数@sDatetime,@eDatetime,@operatorNo,@transdesc。其中@operatorNo和@transdesc为两个可选参数,通过这四个参数如何从存储过程里面提取自己想要的特定数据字段,方法各异,这里我用的是用DataTable的相关操作。
首先打开数据库链接
string strCon = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection conn = new SqlConnection(strCon);
conn.Open();
创建dataTable对象
DataTable dt = new DataTable();
创建SQLDataadapt对象来操作数据源存储过程p_OperatorDetails
SqlDataAdapter da=new SqlDataAdapter("p_OperatorDetails",conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
创建sql参数并为其赋值
SqlParameter p1 = new SqlParameter("@sDatetime", SqlDbType.DateTime);
SqlParameter p2 = new SqlParameter("@eDatetime", SqlDbType.DateTime);
SqlParameter p3 = new SqlParameter("@operatorNo", SqlDbType.Int);
SqlParameter p4 = new SqlParameter("@transdesc", SqlDbType.VarChar);
p1.Value = sTransactionDateStart;
p2.Value = sTransactionDateEnd;
if (sOperatorNo != "")
{
p3.Value = Convert.ToInt32(sOperatorNo);
da.SelectCommand.Parameters.Add(p3);
}
else
{
p3.Value = "";
}
if (sTransTypeNo != "")
{
p4.Value = sTransTypeNo;
da.SelectCommand.Parameters.Add(p4);
}
else
{
p4.Value = "";
}
da.SelectCommand.Parameters.Add(p1);
da.SelectCommand.Parameters.Add(p2);
通过SqlDataAdapter对象将得到的数据集填充到DataTable中去
da.Fill(dt);
注意直接得到的得到的DataTable对象是不能够进行sql操作的(可能我做的项目用这种方法并不适用于各位),关键的问题来了,我想要这个数据集里面的特点字段而不是整个存储过程所得到的数据集,我所使用的方法是用DataTable的Clone方法可能一张新的虚拟表来提供数据供我的报表使用。
DataTable newdt = new DataTable();
newdt = dt.Clone();
DataTable中的数据不能够直接像实际数据表一样操作数据,但是也有它自己的方法
newdt = dt.DefaultView.ToTable(false, new string[] { "BankCardId", "EmployeeName", "Deptname", "TransDesc", "DeviceDateTime", "remain","OperatorName" });
至此,我想要的特定字段的虚拟表就出来了(报表用,做了几天发现这种方法还是最合适的,不知道各位大牛有没有更好的方法)。
C#中存储过程和DataTable的应用的更多相关文章
- 存储过程传入datatable
存储过程传入一般的参数都很简单,今天要说一下存储过程传入datatable 类型 首先要自定义一个 表类型 CREATE TYPE [dbo].[servicedatableType] AS TABL ...
- SQLServer 中存储过程
SQLServer 中存储过程返回的三种方式( 包括存储过程的创建, 在存储过程中调用, 在VS中调用的方法)存储过程有三种返回: 1. 用return返回数字型数据 2. 用返回参数 ...
- Asp.net中存储过程拖拽至dbml文件中,提示无法获得返回值
Asp.net中存储过程拖拽至dbml文件中,提示无法获得返回值,去属性表中设置这时候会提示你去属性表中更改返回类型. 其实存储过程返回的也是一张表,只不过有时候存储过程有点复杂或者写法不规范的话不能 ...
- Sqlserver中存储过程,触发器,自定义函数(二)
Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数 ...
- Sqlserver中存储过程,触发器,自定义函数(一)
Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...
- Sqlserver中存储过程,触发器,自定义函数
Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...
- Oracle中存储过程传入表名学习
Oracle中存储过程传入表名: 一.动态清除该表的数据 create or replace procedure p_deletetable(i_tableName in varchar2) as ...
- oracle中存储过程的使用
存储过程 刚开始我接触到数据库的时候,感觉存储过程是很难的,但是当你看完我给你列举的例子,你就能够轻松的掌握存储过程的创建和使用了. 存储过程是在大型数据库系统中存储过程在数据库中经过第一次编译后就不 ...
- oracle中存储过程详解
oracle中存储过程的使用 过程是指用于执行特定操作的PL/SQL块.如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程.通过使用过程,不仅可以简化客户应用的开发和维护,而且可以提高 ...
随机推荐
- Linux学习之iostat命令详解
我们可以用iostat 命令来监视系统输入/输出.设备负载,这通过观察与它们的平均传送速率相关的物理磁盘的活动时间 来实现.iostat 命令生成的报告可以用来更改系统配置,从而更好地平衡物理磁盘和适 ...
- Monkey的使用
1.进入adb shell 环境 在Windows环境下进入DOS界面,输入adb shell 注意:adb shell服务使用的端口是5037,如果此端口被其他进程占用时,将不能正常启动adb sh ...
- Mac上使用Docker Desktop安装Kubernetes
下载镜像需要特殊手段,你懂的,如果没有特殊手段,建议放弃这种方式. 1 启用Kubernetes 启用过程,会联网下载kubenetes相关的核心组件镜像,如下是我下载好的: 下载好了,kubenet ...
- swagger添加统一认证参数
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Co ...
- 九、git学习之——git基本命令全总结
初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: git add <file>,注意,可反复多次使用,添加多个文件: 使用命令git commit,完成. ...
- Linux 查看CPU型号,内存大小,硬盘空间的命令
1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 1.2 查看CPU核数 # ...
- Mysql8.0新特性【详细版本】
1. 账户与安全 用户创建与授权 之前:创建用户并授权 1 grant all privileges on *.* to 'myuser'@'%' identified by '3edc#EDC'; ...
- MyBatis详细源码解析(上篇)
前言 我会一步一步带你剖析MyBatis这个经典的半ORM框架的源码! 我是使用Spring Boot + MyBatis的方式进行测试,但并未进行整合,还是使用最原始的方式. 项目结构 导入依赖: ...
- Swing01-概述
1.Swing概述 Swing百分之百由Java本身实现,是一套轻量级组件(完全由Java实现的组件叫做轻量级套件,依赖于本地平台的套件称之为重量级套件).Swing不再依赖于平台的GUI,因此真正做 ...
- [打基础]OI/ACM基本功&一些小功能的实现&一些错误(持续更新)
基本功 前导0 如题,有时候需要把3输出成03这样子,可以调用 cout.width(x); ,x表示以几位,用 cout.fill(x); 来给出前导填充的内容,一般x以char的形式给出 例如可以 ...