C#使用Datatable导入sqlserver数据库的三种方法

 更新时间:2024年08月15日 10:30:24   作者:新时代丘鸣山  
本文主要介绍了C#使用Datatable导入sqlserver数据库的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

第一种,最常见的Executenonquery(返回影响的行数)sql是我的查询插入语句,你可以换成你的!这种方式入库,速度一般,大量数据时不提倡使用

/// <summary>
        /// 通过table一个一个的插入
        /// </summary>
        /// <param name="table"></param>
        public static void Executenonquery(DataTable table)
        {
            foreach (DataRow itemRow in table.Rows)
            {
                //if exists(select * from dbo.ID where ENG = '')
                //   begin
                //        return;
                //                end
                //else
                //   begin
                //        INSERT INTO ID([ENG],[GB],[B5],[FILE],[MSG]) values('', '', '', '', '')
                //   end
                string sql = "if exists(select * from " + table.TableName + " where ENG = '" + itemRow["ENG"].ToString() + "') "+
                             " begin return; end else begin INSERT INTO " + table.TableName + "([ENG],[GB],[B5],[FILE],[MSG])" +
                             "VALUES('" + itemRow["ENG"].ToString() + "'" +
                             ",'" + itemRow["GB"].ToString() + "'" +
                             ",'" + itemRow["B5"].ToString() + "'" +
                             ",'" + itemRow["FILE"].ToString() + "'" +
                             ",'" + itemRow["MSG"].ToString() + "') end";
                using (SqlConnection sqlconn = new SqlConnection(connectString))
                {
                    sqlconn.Open();

                    SqlCommand sqlcommand = new SqlCommand(sql, sqlconn);
                    sqlcommand.ExecuteNonQuery();
                    sqlconn.Close();
                }
            }
        }

2,通过adapter入库,这种入库,起先,你需要先把datatable放入到dataset中然后进行入库,这种方式主要是对库中对应的表进行增删改,方便使用(效率只比第一种方式好点)

/// <summary>
        /// 通过adapter更新数据库
        /// </summary>
        /// <param name="dataset"></param>
        public static void DataadapterInssert(DataSet dataset)
        {
            if (dataset.Tables.Count > 0)
            {
                foreach (DataTable itemTable in dataset.Tables)
                {
                    SqlCommand insertcommand = new SqlCommand("if exists(select * from " + itemTable.TableName + " where ENG = @ENG) begin return; end "+
                                      " else begin INSERT INTO " + itemTable.TableName + "([ENG],[GB],[B5],[FILE],[MSG])" +
                                      "VALUES(@ENG, @GB,@B5,@FILE,@MSG) end", new SqlConnection(connectString));
                    insertcommand.Parameters.Add("@ENG", SqlDbType.VarChar, 100, "ENG");
                    insertcommand.Parameters.Add("@GB", SqlDbType.VarChar, 100, "GB");
                    insertcommand.Parameters.Add("@B5", SqlDbType.VarChar, 200, "B5");
                    insertcommand.Parameters.Add("@FILE", SqlDbType.VarChar, 200, "FILE");
                    insertcommand.Parameters.Add("@MSG", SqlDbType.VarChar, 100, "MSG");

                    SqlDataAdapter sqldataadapter = new SqlDataAdapter();
                    sqldataadapter.InsertCommand = insertcommand;

                    sqldataadapter.Update(dataset, itemTable.TableName);
                }
            }
            
        }

3,重头戏都在最后,这种方式速度比前两种快很多,适合用于大量数据插入更新,也将datatable放入dataset中然后通过遍历,将datatable复制到数据库中对应的表中,快速便捷

// <summary>
        /// 通过SqlBulkCopy复制table数据到数据库
        /// </summary>
        /// <param name="dataset"></param>
        public static void SqlbulkcopyInsert(DataSet dataset)
        {
            string ie;
            if (dataset.Tables.Count > 0)
            {
                foreach (DataTable itemTable in dataset.Tables)
                {
                    SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectString, SqlBulkCopyOptions.UseInternalTransaction);
                    sqlbulkcopy.DestinationTableName = itemTable.TableName;//数据库中的表名
                    for (int i = 0; i < itemTable.Rows.Count; i++)
                    {
                        ie = itemTable.Rows[i][2].ToString();
                    }
                    sqlbulkcopy.WriteToServer(itemTable);
                }
            }
            
        }

到此这篇关于C#使用Datatable导入sqlserver数据库的三种方法的文章就介绍到这了,更多相关C# Datatable导入sql内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • C#实现的UDP收发请求工具类实例

    C#实现的UDP收发请求工具类实例

    这篇文章主要介绍了C#实现的UDP收发请求工具类,结合具体实例形式分析了C#针对UDP请求的监听、接收、发送等相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • 在类库或winform项目中打开另一个winform项目窗体的方法

    在类库或winform项目中打开另一个winform项目窗体的方法

    这篇文章主要介绍了在类库或winform项目中打开另一个winform项目窗体的方法,可以实现Winform项目间窗体的调用,在进行Winform项目开发中非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • C#实现图片放大功能的按照像素放大图像方法

    C#实现图片放大功能的按照像素放大图像方法

    这篇文章主要介绍了C#实现图片放大功能的按照像素放大图像方法,功能非常实用,需要的朋友可以参考下
    2014-07-07
  • C# 利用Aspose.Words.dll将 Word 转成PDF

    C# 利用Aspose.Words.dll将 Word 转成PDF

    关于word转成pdf的方法网上有很多。大部分需要借助office 2007及以上版本的组件。安装配置起来比较麻烦。今天偶然得之“Aspose.Words.dll”可以实现
    2013-08-08
  • C#学习笔记整理-迭代器模式介绍

    C#学习笔记整理-迭代器模式介绍

    下面小编就为大家分享一篇C#学习笔记整理-迭代器模式介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 使用C#开发ActiveX控件

    使用C#开发ActiveX控件

    activex控件以前也叫做ole控件,它是微软ie支持的一种软件组件或对象,可以将其插入到web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力。通常activex控件都是用c++或vb语言开发,本文介绍另一种方式,使用c#语言开发activex控件。
    2017-02-02
  • C#自定义音乐播放器进度条

    C#自定义音乐播放器进度条

    这篇文章主要为大家详细介绍了C#自定义音乐播放器进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • C#表达式树讲解

    C#表达式树讲解

    本文详细讲解了C#表达式树的创建、生成和使用,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • C#的Socket实现UDP协议通信示例代码

    C#的Socket实现UDP协议通信示例代码

    本篇文章主要介绍了C#的Socket实现UDP协议通信示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C#实现在服务器端裁剪图片的方法

    C#实现在服务器端裁剪图片的方法

    这篇文章主要介绍了C#实现在服务器端裁剪图片的方法,涉及C#操作图片的相关技巧,需要的朋友可以参考下
    2015-04-04

最新评论