• SQL之多行数据添加与修改----用户定义表类型


           对于多行数据的增加和修改,之前一直是使用循环,一条条调用insert或update语句,这样后台会不停与sqlserver建立连接,会严重影响SQLSERVER的性能,现使用用户定义表类型,解决此问题,后台将插入或修改的数据转为DataTable,然后传入参数,调用存储过程,本次案例使用vs2019和SQL Server2014。

    1.创建自定义表类型:点击 数据库---db_ERP(数据库名称)---可编译性---类型---用户定义表类型---右键 新建用户定义表类型

    CREATE TYPE InsertTPerson AS TABLE 
    (
        [FName] [varchar](30) NULL,
        [FCITY] [varchar](20) NULL,
        [FAGE] [int] NULL,
        [FSalary] [decimal](18, 0) NULL
    )

    2.创建存储过程

    CREATE PROCEDURE InsertT_Person
        @dt dbo.InsertTPerson readonly
    AS
    BEGIN
      INSERT INTO T_Person
      SELECT FName
            ,FCity
            ,FAge
            ,FSalary
        FROM @dt
    END

    3.c#代码:注意datatable字段必须与建立的自定义表类型字段顺序一致,不一致会出错,此方法还有一个就是执行结果返回为0,所以不能根据执行行数判断结果

    using System.Data.SqlClient;
    using System.Data;
    namespace ThreadDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("FName");
                dt.Columns.Add("FCity");
                dt.Columns.Add("FAge");
                dt.Columns.Add("FSalary");
                DataRow row1 = dt.NewRow();
                row1["FName"] = "小明";
                row1["FCity"] = "哈尔滨";
                row1["FAge"] = 27;
                row1["FSalary"] = 18000;
                dt.Rows.Add(row1);
                DataRow row2 = dt.NewRow();
                row2["FName"] = "小蔡";
                row2["FCity"] = "哈尔滨";
                row2["FAge"] = 25;
                row2["FSalary"] = 10000;
                dt.Rows.Add(row2);
                InsertTPerson(dt);
            }
    
            private static void InsertTPerson(DataTable dt)
            {
                string connstr = "Server=.;database=db_ERP;integrated security=true;";
                try
                {
                    using (SqlConnection conn = new SqlConnection(connstr))
                    {
                        SqlCommand cmd = new SqlCommand();
                        cmd.Connection = conn;
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "InsertT_Person";
                        cmd.Parameters.AddWithValue("@dt", dt);
                        conn.Open();
                        cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
                catch (SqlException ex)
                {
                    throw ex;
                }
            }
        }
    }

  • 相关阅读:
    Python3基础 str """ 多行字符串
    Python3基础 str *运算 重复拼接字符串
    Python3基础 time.localtime 当前系统的年月日 时分秒
    Python3基础 time 索引值访问元组中的年月日时分秒
    Python3基础 sys.path 查看搜索路径变量
    Python3基础 sys.path.append 增加模块的搜索路径
    C#中ListView的简单使用方法
    C#的注释和快速开启工具的命令
    sql server2008安装错误(无法处理异常)
    启动计算机总弹出页面配置问题
  • 原文地址:https://www.cnblogs.com/hobelee/p/12495566.html
Copyright © 2020-2023  润新知