C# 调用存储过程传入表变量作为参数
首先在SQLServer定义一个自定义表类型:
USE [ABC]
GO CREATE TYPE [ABC].[MyCustomType] AS TABLE(
[EmployeeId] [char](6) NOT NULL,
[LastName] [varchar](30) NULL,
[FirstName] [varchar](30) NULL
--省略很多列
)
GO
程序部分:
static void Test()
{
//定义与表类型结构相同的DataTable
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn() { ColumnName = "EmployeeId", DataType = System.Type.GetType("System.String") });
dataTable.Columns.Add(new DataColumn() { ColumnName = "LastName", DataType = System.Type.GetType("System.String") });
dataTable.Columns.Add(new DataColumn() { ColumnName = "FirstName", DataType = System.Type.GetType("System.String") });
//...此处省略很多行 //插入数据行, 请注意不同类型的赋值, 这里应该根据实际情况添加很多行
DataRow dataRow = dataTable.NewRow();
dataRow["EmployeeId"] = "";
dataRow["LastName"] = "Nick";
dataRow["FirstName"] = "Yang";
//此处省略插入很多行
dataTable.Rows.Add(dataRow); string connStr = "Data Source=.;Database=ABC;user id=sa;password=***;Persist Security Info=True";
SqlConnection conn = new SqlConnection(connStr);
conn.Open(); try
{
using (SqlCommand cmd = new SqlCommand(@"MCU.存储过程名", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
//关键是类型
SqlParameter parameter = new SqlParameter("@import", SqlDbType.Structured);
//必须指定表类型名
parameter.TypeName = "ABC.MyCustomType";
//赋值
parameter.Value = dataTable;
cmd.Parameters.Add(parameter);
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw new SystemException("Failed to insert result route.", ex);
}
finally
{
conn.Close();
}
}
C# 调用存储过程传入表变量作为参数的更多相关文章
- Oracle中存储过程传入表名学习
Oracle中存储过程传入表名: 一.动态清除该表的数据 create or replace procedure p_deletetable(i_tableName in varchar2) as ...
- clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...
- SQL知识整理一:触发器、存储过程、表变量、临时表
触发器 触发器的基础知识 create trigger tr_name on table/view {for | after | instead of } [update][,][insert][,] ...
- MyBatis之四:调用存储过程含分页、输入输出参数
在前面分别讲解了通过mybatis执行简单的增删改,多表联合查询,那么自然不能缺少存储过程调用,而且还带分页功能. 注意:表结构参见上篇讲解联合查询的表. 一.查询某班级以及该班级下面所有学生的记录 ...
- PROCEDURE存储过程传入表参数
) ,itemNum ) ,itemQty )) ---2.创建一个存储过程以表值参数作为输入 alter proc usp_TestProcWithTable @tb LocationTa ...
- .NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示
直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路 1.view页面 <link href="~/Content/bootstrap.css" ...
- oralce 存储过程传入 record 类型的参数?
先定义一个 package , package中含有一个 record 类型的变量 create or replace package pkg_record is type emp_record is ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- SQL SERVER 2008 存储过程传表参数
最近项目使用到了存储过程传入表类型参数. --定义表类型 create type t_table_type as table ( id int, name varchar(32), sex var ...
随机推荐
- IoC容器Autofac之实例引入(一)
先不必尝试理解IOC,先来看段代码. 一.一个没有使用IoC的例子 public class MPGMovieLister { public Movie[] GetMPG() { var finder ...
- servlet乱码以及解决
// 浏览器提交的数据是000110011(码表中对应的<编码> )等东西. // 浏览器以什么<码表>打开浏览器(而空中浏览器使用的编码是:<meta http-eq ...
- DOM 对象之 document.all
1.document.all是页面内所有元素的一个集合: 2.经测试在chrome,safari,opera,ie中均返回一个HTMLALLCollection[xx]对象,在FF中返回是一个unde ...
- 域名变更后获取cookie
有个朋友问我,域名更换后怎么获取原有域名下的cookie,当时第一反应是域名都不存在还怎么获取cookie. 后面想想似乎是可以的,使用新域名后可以保留原有域名,通过jsonp或iframe跨域获取原 ...
- [Netty 1] 初识Netty
1. 简介 最早接触netty是在阅读Zookeeper源码的时候,后来看到Storm的消息传输层也由ZMQ转为Netty,所以决心好好来研究和学习一下netty这个框架. Netty项目地址:htt ...
- 为编写网络爬虫程序安装Python3.5
1. 下载Python3.5.1安装包1.1 进入python官网,点击menu->downloads,网址:https://www.python.org/downloads/ 1.2 根据系统 ...
- java中Timer计时器使用
1.新建计时器Timer对象 2.给计时器安排任务,schedule方法 3.取消计时器中分配的任务,purge方法 4.终止计时器,cancel方法 注意:如果计时器已经终止,还要给计时器安排任务, ...
- javacc
http://www.cnblogs.com/Gavin_Liu/archive/2009/03/07/1405029.html https://javacc.java.net/ http://www ...
- windbg命令详解
DLL 该扩展仅在内核模式下使用,即使它是在Ext.dll中的. Windows NT 4.0 Ext.dll Windows 2000 Ext.dll Windows XP和之后 Ext.dll ...
- JavaEE Tutorials (30) - Duke综合案例研究示例
30.1Duke综合应用的设计和架构456 30.1.1events工程458 30.1.2entities工程459 30.1.3dukes—payment工程461 30.1.4dukes—res ...