• C# 如何把dataTable以参数的形式传入 sql 存储过程


    ==================================================
    -- sql代码 示例:
    CREATE TYPE dbo.Content AS TABLE
    (
    ID int, --ID

    OutCashAccountNo nvarchar(100), --出账账号
    OutName nvarchar(50),

    InCashAccountNo nvarchar(100), --进账账号
    InName nvarchar(50),
    CashType int,
    Amount decimal(36,16), --金额
    IsSuccess int, --是否成功
    YuanYin nvarchar(200), --成功或失败原因
    RemarkContent nvarchar(300), --ID+YuanYin//199_交易失败嘎嘎

    RunWater nvarchar(300), --ID + GUID//RunWater 19982a21f02-d184-499f-a69f-32af77851f83

    AddTime DateTime, --FinanceLog 表 AddTime

    Type int, --FinanceLog 表 Type

    OperationType int --FinanceLog 表 OperationType

    )
    go


    --更新DebtAssignmentCashFlow
    create procedure [dbo].[updateDebtAssignmentCashFlow2]
    @InsertData Content READONLY --readonly
    as
    begin

    update DebtAssignmentCashFlow set CashType=3
    from DebtAssignmentCashFlow as d
    inner join @InsertData as t
    on d.ID=t.ID

    end
    go

    ======================================================================================
    --C# 代码示例:

    --调用
    DataTable data2 = new DataTable();
    data2 = Extensions.ToDataTable(newList);
    int k = updateDebtAssignmentCashFlow2(data2);


    /// <summary>
    /// 批量更新DebtAssignmentCashFlow
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    private static int updateDebtAssignmentCashFlow2(DataTable dt)
    {
    bool flg = true;
    int c = 0;
    try
    {
    SqlConnection con = new SqlConnection(connString);
    con.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText = "updateDebtAssignmentCashFlow2";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@InsertData", SqlDbType.Structured);
    cmd.Parameters[0].Value = dt;
    c = cmd.ExecuteNonQuery();
    con.Close();
    }
    catch (Exception ex)
    {
    EF.BLL.LogHelper.Instance.Log.Info(string.Format("[error]:{0},表DebtAssignmentCashFlow批量更新失败!", ex));
    flg = false;
    c = -1;
    }
    return c;
    }

    如果datable 没有做列的映射的话,列的顺序与自定义表类型的顺序不一致会导致插入失败

    这个时候就需要 DataTable 调整列顺序:

     dt.Columns["BatchNo"].SetOrdinal(0);
     dt.Columns["CardCode"].SetOrdinal(1);
     dt.Columns["PhoneNumber"].SetOrdinal(2);

    把 BatchNo 列设置为第一列

  • 相关阅读:
    ASP.NET Core 问题排查:Request.EnableRewind 后第一次读取不到 Request.Body
    解决 AutoMapper ProjectTo 不起作用的问题
    解决 ASP.NET Core 自定义错误页面对 Middleware 异常无效的问题
    ASP.NET Core 从 gitlab-ci 环境变量读取配置
    终于解决 xUnit.net 测试中无法输出到控制台的问题
    ASP.NET Core 新建线程中使用依赖注入的问题
    前端回顾:2016年 JavaScript 之星
    前端工程师和设计师必读文章推荐【系列三十五】
    AsciiMorph
    Notyf
  • 原文地址:https://www.cnblogs.com/yangjinwang/p/4213733.html
Copyright © 2020-2023  润新知