存储过程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的应用的更多相关文章

  1. 存储过程传入datatable

    存储过程传入一般的参数都很简单,今天要说一下存储过程传入datatable 类型 首先要自定义一个 表类型 CREATE TYPE [dbo].[servicedatableType] AS TABL ...

  2. SQLServer 中存储过程

    SQLServer 中存储过程返回的三种方式( 包括存储过程的创建, 在存储过程中调用, 在VS中调用的方法)存储过程有三种返回:   1.   用return返回数字型数据   2.   用返回参数 ...

  3. Asp.net中存储过程拖拽至dbml文件中,提示无法获得返回值

    Asp.net中存储过程拖拽至dbml文件中,提示无法获得返回值,去属性表中设置这时候会提示你去属性表中更改返回类型. 其实存储过程返回的也是一张表,只不过有时候存储过程有点复杂或者写法不规范的话不能 ...

  4. Sqlserver中存储过程,触发器,自定义函数(二)

    Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数 ...

  5. Sqlserver中存储过程,触发器,自定义函数(一)

    Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...

  6. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  7. Oracle中存储过程传入表名学习

    Oracle中存储过程传入表名: 一.动态清除该表的数据 create or replace procedure p_deletetable(i_tableName in varchar2)  as  ...

  8. oracle中存储过程的使用

    存储过程 刚开始我接触到数据库的时候,感觉存储过程是很难的,但是当你看完我给你列举的例子,你就能够轻松的掌握存储过程的创建和使用了. 存储过程是在大型数据库系统中存储过程在数据库中经过第一次编译后就不 ...

  9. oracle中存储过程详解

    oracle中存储过程的使用 过程是指用于执行特定操作的PL/SQL块.如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程.通过使用过程,不仅可以简化客户应用的开发和维护,而且可以提高 ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性不能覆盖写的问题

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dra ...

  2. PyQt(Python+Qt)学习随笔:Qt Designer中窗口对象的windowFilePath属性

    windowFilePath属性仅对窗口对象有效,用于关联一个窗口和对应的文件及路径. 当窗口没有设置标题属性的情况下,则窗口标题展示展示windowFilePath对应的文件名的信息(路径信息不展示 ...

  3. LeetCode初级算法之数组:26 删除排序数组中的重复项

    删除排序数组中的重复项 题目地址:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 给定一个排序数组,你需要在 ...

  4. js防抖与节流了解一下

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. .pfx和.Cer 证书

    通常情况下,作为文件形式存在的证书一般有三种格式: 第一种:带有私钥的证书,由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进 ...

  6. 题解-Magic Ship

    Magic Ship 你在 \((x_1,y_1)\),要到点 \((x_2,y_2)\).风向周期为 \(n\),一个字符串 \(s\{n\}\) 表示风向(每轮上下左右),每轮你都会被风向吹走一格 ...

  7. 移动端H5微信分享

    移动端H5微信分享功能,可以使项目更好地传播. 微信官方教程文档:  微信JS-SDK说明文档 步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置&quo ...

  8. 容器编排系统之Kubernetes基础入门

    一.kubernetes简介 1.什么是kubernetes?它是干什么用的? kubernetes是google公司用go语言开发的一套容器编排系统,简称k8s:它主要用于容器编排:所谓容器编排简单 ...

  9. Pytest 学习(二十五)- 解决pytest参数化测试标题都一样问题

    前言 使用参数化测试化后,allure的报告如下显示: 源代码如下: # -*- coding: utf-8 -*- # @Time : 2020/12/13 17:27 # @Author : lo ...

  10. 用rundeck启动tomcat报错

    报错如下Neither the JAVA_HOME nor the JRE_HOME environment variable is defined09:28:50 At least one of t ...