经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
使用表类型(Table Type-SqlServer)实现百万级别的数据一次性毫秒级别插入
来源:cnblogs  作者:卖身H也H卖艺  时间:2018/11/3 10:08:41  对本文有异议

使用表类型(Table Type)实现百万级别的数据一次性插入

思路 

         1 创建表类型(TaBleType)
         2 创建添加存储过程
         3 使用C#语言构建一个DataTable
         4 将整个Table作为参数插入


步骤1 创建表类型(TaBleType)

CREATE TYPE [dbo].[TestTableType] AS TABLE(
[SeriesNumber] [nvarchar](80) NOT NULL,
[CustomerName] [nvarchar](80) NOT NULL,
)

 

步骤2  创建添加存储过程

CREATE procedure [dbo].[usp_Add_RepeatDataAnalysis]
(
@TestTableType TestTableType READONLY
)
AS
BEGIN
SET NOCOUNT ON
BEGIN TRANSACTION
INSERT INTO MES_SNOriginal
(
SeriesNumber,
CustomerName
)
SELECT
SeriesNumber
,CustomerName
FROM @TestTableType
COMMIT TRANSACTION
END

步骤3  使用C#语言构建一个DataTable

public static void TestTableType()
{

DataTable dataTable = new DataTable();

dataTable.Columns.Add("SeriesNumber", typeof(string));

dataTable.Columns.Add("CustomerName", typeof(string));

DataRow dataRow = dataTable.NewRow();

dataRow["SeriesNumber"] = "SeriesNumber";

dataRow["CustomerName"] = "SeriesNumber";

AddTestTableType(dataTable);

}

 

步骤4  将整个Table作为参数插入

public static void AddTestTableType(DataTable dt)
{

SqlParameter[] parameters = new SqlParameter[1];

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

ExecuteStoredProcedure("usp_Add_RepeatDataAnalysis", parameters);

}

public static void ExecuteStoredProcedure(string spName, SqlParameter[] parameterValues)
{

//自己配置数据库连接

string connectionString = "";

List<TestTableTypeDTO> resultList = new List<TestTableTypeDTO>();

using (SqlConnection conn = new SqlConnection(connectionString))

{

conn.Open();

SqlCommand cmd = new SqlCommand(spName, conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandTimeout = 0;

foreach (SqlParameter p in parameterValues)

{

if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))

{

p.Value = DBNull.Value;

}

cmd.Parameters.Add(p);

}

cmd.ExecuteNonQuery();

}

}

}

public class TestTableTypeDTO
{

public int MES_SNOriginal_UID { get; set; }

public string SeriesNumber { get; set; }

}

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号