1.list转换为DataTable(如果有需要)

        public static DataTable ListToDataTable<T>(List<T> entitys)
{
//检查实体集合不能为空
if (entitys == null || entitys.Count < 1)
{
throw new Exception("需转换的集合为空");
}
//取出第一个实体的所有Propertie
Type entityType = entitys[0].GetType();
PropertyInfo[] entityProperties = entityType.GetProperties(); //生成DataTable的structure
//生产代码中,应将生成的DataTable结构Cache起来,此处略
DataTable dt = new DataTable();
for (int i = 0; i < entityProperties.Length; i++)
{
//dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
dt.Columns.Add(entityProperties[i].Name);
}
//将所有entity添加到DataTable中
foreach (object entity in entitys)
{
//检查所有的的实体都为同一类型
if (entity.GetType() != entityType)
{
throw new Exception("要转换的集合元素类型不一致");
}
object[] entityValues = new object[entityProperties.Length];
for (int i = 0; i < entityProperties.Length; i++)
{
entityValues[i] = entityProperties[i].GetValue(entity, null);
}
dt.Rows.Add(entityValues);
}
return dt;
}

  2.得到DATATable

DataTable CutLayHdDt = ListToDataTable(CutLayHds);//CutLayHds is list

  3.数据库创建 自定义类型

创建的自定义类型与表类型,字段需和C#datatable 的列名一致

CREATE TYPE [dbo].[CUT_LAY_HDCustomType] AS TABLE(
[LAY_TRANS_ID] [bigint] NULL,
[LAY_ID] [bigint] NULL,
[SIZE_CD] [nvarchar](20) NOT NULL,
[RATIO] [int] NOT NULL,
[SIZE_CD2] [nvarchar](20) NULL,
[JOB_ORDER_NO] [nvarchar](20) NULL,
[LAY_NO] [bigint] NULL
)
GO

  4.编写存储过程进行使用

create proc USP_CUTTING_TATABLET_PULL_FINISH2
(
@CutlayhdList CUT_LAY_HDCustomType READONLY--定义参数,接收datatable
)
as
SELECT *, IDENTITY(int, 1, 1) AS ID INTO #cutlayhdtemp FROM @CutlayhdList--将参数的值插入到临时表

  5.C#调用

SqlParameter[] parameters = new SqlParameter[1];

                parameters[0] = new SqlParameter() { ParameterName = "CutlayhdList", Value = CutLayHdDt };//值为上面转换的datatable
ExecuteNonQuery("USP_CUTTING_TATABLET_PULL_FINISH", parameters);

  -------------方法

public static void ExecuteNonQuery(string spName, SqlParameter[] parameterValues)
{
string connectionString = ConfigurationManager.ConnectionStrings["CuttingDev"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
// Invoke RegionUpdate Procedure
SqlCommand cmd = new SqlCommand(spName, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandTimeout = 0;
foreach (SqlParameter p in parameterValues)
{
//eck for derived output value with no value assigned
if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
{
p.Value = DBNull.Value;
} cmd.Parameters.Add(p);
}
cmd.ExecuteNonQuery();
}
}

  

将C# dataTable 做为参数传入到存储过程的更多相关文章

  1. 数组做为参数传入Oracle存储过程操作数据库

    p { margin-bottom: 0.25cm; direction: ltr; color: rgb(0, 0, 0); line-height: 120%; text-align: justi ...

  2. 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

    领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...

  3. C#反射 字符串转为实体类,并做为参数传入泛型方法中使用

    工作中有这样一个需求,有N张不同的报表,每张报表对应一个数据源,统计数据采用内存方式,首先在内在里定义了数据源对应实体.统计条件用lamdba表达式式实现,通过工具对单元格进行定义.在实现过程中针对每 ...

  4. C#中的datatable类型作为参数传入SQL的存储空间

    SQL中首先建立一个结构一样的自定义类型的表格,在存储空间中申明一个此类型的变量,此处注意此时后面必须有readonly,如: @paravalue_insert MaterialStruct rea ...

  5. 写一个函数,将一个int型的数组做为参数传入,使用指针返回两个结果:最大值和最小值

    今日下午研究了一下c语言中的指针问题,c语言的核心是指针,指针的核心是地址,地址的核心是内存. #include <stdio.h> void hanshu(int *arry,int s ...

  6. oracle Array类型作为参数传入函数(存储过程) 大字符串参数解决方案

    1. 创建自定义的类型.由于Oracle没有提供现成的array类型,这里用table类型来模拟. CREATE OR REPLACE TYPE varchar_array is Table OF v ...

  7. Python函数的定义、参数传入与函数的调用

    作为计算机代码的一种抽象方式,函数在Python中扮演了极为重要的角色.今天给大家介绍Python函数的定义.参数的传入以及调用方式.其中函数参数的传入方式为本节重点内容.Python函数的参数形式包 ...

  8. 120-PHP调用成员方法并将不同类的对象做为参数

    <?php class ourself{ //定义自己人类 private $birthday='1990-12-20'; //定义private修饰的成员属性 public function ...

  9. C++基础--引用做函数参数

    引用,简单粗暴的解释叫做别名,简单粗暴的例子就是,我是熊叫大雄,但是很多时候别人不叫我熊叫大雄,会叫我大雄,粤语地区朋友爱叫我阿雄,有人叫我雄,所以,熊叫大雄这个变量的值是我,雄.大雄.阿雄是熊叫大雄 ...

随机推荐

  1. PHP: 深入pack/unpack 字节序

    http://my.oschina.net/goal/blog/195749?p=1 目录[-] 写在前面的话 什么是字节序 MSB和LSB 大端序 小端序 网络字节序 主机字节序 总结 pack/u ...

  2. PhpCMS标签:专题模块special标签

    专题模块 专题模块PC标签调用说明 模块名:special 模块提供的可用操作 操作名 说明 lists 专题列表 content_list 专题信息列表 hits 专题信息点击排序 下面对所有的操作 ...

  3. Redis 有序集合(sorted set)

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合中的成员进行从小到大的排序. 有序 ...

  4. 使用Loadrunner进行接口测试

    在工作中很多时候都需要进行接口测试,如果只是进行接口的功能测试这个很简单,两种类型: 1.如果是基于get的直接使用浏览器进行访问,查看服务器返回的数据是否正确就行, 2.如果是基于post的可以接触 ...

  5. C语言第一节 C语言程序与开发工具

    开发工具的选择 可以用来写代码的工具:记事本.UltraEdit.Vim.Xcode等 选择Xcode的原因:苹果官方提供的开发利器.简化开发过程.有高亮显示功能 使用Xcode新建一个C程序的源代码 ...

  6. PHP读书笔记(4)-运算符

    什么是运算符 什么是运算符?运算符是告诉PHP做相关运算的标识符号.例如,你需要计算123乘以456等于多少,这时候就需要一个符号,告诉服务器,你需要做乘法运算. PHP中的运算符有哪些?PHP运算符 ...

  7. Visual studio 2012 添加 GitHub

    文件-新建项目

  8. win8.1恢复win7 CTRL+Space切换输入法

    win8用起来还是有很多好用的东西的,但是最让我受不了的就是输入法的切换,可以说是丧心病狂!!!折磨了我好久,今天终于找到了解决的办法! 那就是这位博客园的哥们给出的方案! http://www.cn ...

  9. poj 2373 单调队列优化背包

    思路:我们用单调队列保存2*b<=i-j<=2*a中的最大值.那么队列头就是最大值,如果队头的标号小于i-2*b的话,就出队,后面的肯定用不到它了. #include<iostrea ...

  10. iOS用AVAudioPlayer播放m4a音频

    音频文件sound.m4a放到Supporting Files目录 引用头文件 #import <AVFoundation/AVFoundation.h> 定义一个全局的属性: @prop ...