上次在根据excel的文件的路径提取其中表的数据到DataSet中 一文中介绍了将Excel文件中的数据读取到DataSet中的方法,今天我来介绍下我曾经在项目中用到的一个将DataTable中的数据导入到数据库中的方法和将DataTable中的数据写入数据库并过滤掉重复数据的方法。代码可以给大家作为Demo看下,如果需要应用的话,可能需要进行
小小的改动即可。
/// <summary>
/// 将DataTable中数据写入数据库中
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static bool WriteDataToDB(DataTable dt)
{
if (dt==null || dt.Rows.Count == 0)
{
return true;
}
string tname = dt.TableName;
string colNames = "";
for (int i = 0; i < dt.Columns.Count; i++)
{
colNames += dt.Columns[i].ColumnName + ",";
}
colNames = colNames.TrimEnd(',');
string cmd = "";
string colValues;
string cmdmode = string.Format("insert into {0}({1}) values({{0}});", tname, colNames);
for (int i = 0; i < dt.Rows.Count; i++)
{
colValues = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
if (dt.Rows[i][j].GetType() == typeof(DBNull))
{
colValues += "NULL,";
continue;
}
if (dt.Columns[j].DataType == typeof(string))
colValues += string.Format("'{0}',", dt.Rows[i][j]);
else if (dt.Columns[j].DataType == typeof(int) || dt.Columns[j].DataType == typeof(float) || dt.Columns[j].DataType == typeof(double))
{
colValues += string.Format("{0},", dt.Rows[i][j]);
}
else if (dt.Columns[j].DataType == typeof(DateTime))
{
colValues += string.Format("cast('{0}' as datetime),", dt.Rows[i][j]);
}
else if (dt.Columns[j].DataType == typeof(bool))
{
colValues += string.Format("{0},", dt.Rows[i][j].ToString());
}
else
colValues += string.Format("'{0}',", dt.Rows[i][j]);
}
cmd = string.Format(cmdmode, colValues.TrimEnd(','));
}
int ret = 0;
try
{
ret = DbHelperSQL.ExecuteSql(cmd);
}
catch (Exception e)
{
//写错误日志...
string strOuput = string.Format("向数据库中写数据失败,错误信息:{0},异常{1}\n", e.Message, e.InnerException);
//将信息写入到日志输出文件
DllComm.TP_WriteAppLogFileEx(DllComm.g_AppLogFileName, strOuput);
}
if (ret == -1)
{
return false;
}
return true;
}
/// <summary>
/// 写入基础数据,并删除其中的重复的项目
/// </summary>
/// <param name="dt"></param>
/// <param name="KeyName">主键</param>
/// <param name="icol">主键所在的列</param>
/// <returns></returns>
public static bool WriteDataToDB(DataTable dt, string KeyName, int icol)
{
//删除数据库中的重复项目
string mKeyStr = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
mKeyStr += "'" + dt.Rows[i][icol] + "',";
}
mKeyStr = mKeyStr.Trim(',');
string sqlStr = "Delete from " + dt.TableName + " where " + KeyName + " in (" + mKeyStr + ")";
DbHelperSQL.ExecuteSql(sqlStr);
//向数据库中写入新的数据
string tname = dt.TableName;
string colNames = "";
for (int i = 0; i < dt.Columns.Count; i++)
{
colNames += dt.Columns[i].ColumnName + ",";
}
colNames = colNames + "CreateDate ";
string cmd = "";
string colValues;
string cmdmode = string.Format("insert into {0}({1}) values({{0}});", tname, colNames);
for (int i = 0; i < dt.Rows.Count; i++)
{
colValues = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
if (dt.Rows[i][j].GetType() == typeof(DBNull))
{
colValues += "NULL,";
continue;
}
if (dt.Columns[j].DataType == typeof(string))
{
colValues += string.Format("'{0}',", dt.Rows[i][j]);
}
else if (dt.Columns[j].DataType == typeof(int) || dt.Columns[j].DataType == typeof(float) || dt.Columns[j].DataType == typeof(double))
{
colValues += string.Format("{0},", dt.Rows[i][j]);
}
else if (dt.Columns[j].DataType == typeof(DateTime))
{
colValues += string.Format("cast('{0}' as datetime),", dt.Rows[i][j]);
}
else if (dt.Columns[j].DataType == typeof(bool))
{
colValues += string.Format("{0},", dt.Rows[i][j].ToString());
}
else
colValues += string.Format("'{0}',", dt.Rows[i][j]);
}
colValues += "getdate()";
cmd = string.Format(cmdmode, colValues);
int ret = 0;
try
{
ret = DbHelperSQL.ExecuteSql(cmd);
}
catch (Exception e)
{
//写错误日志...
string strOuput = string.Format("向数据库中写数据失败,错误信息:{0},异常{1}\n", e.Message, e.InnerException);
//将信息写入到日志输出文件
DllComm.TP_WriteAppLogFileEx(DllComm.g_AppLogFileName, strOuput);
}
if (ret == -1)
{
return false;
}
}
return true;
}
分享到:
相关推荐
内容概要:本资源介绍了如何从利用Npoi库操作Excel,如相关读取单元格、行,介绍了如何对单元格数据格式进行操作,并分享了如何将Datatable数据导入Mysql数据库,方便项目管理。 阅读建议:此资源以如何读取Excel...
### vb.net将excel中的数据导入到数据库 在日常工作中,我们经常会遇到需要将Excel文件中的数据导入到数据库的情况。例如,在进行数据分析、报表处理或数据迁移等任务时,这种需求尤为常见。本篇文章将详细介绍如何...
4. 将Excel数据导入到数据库:使用ADO.NET或其他数据访问技术将Excel数据导入到数据库中,例如使用SqlDataAdapter将数据导入到SQL Server数据库中。 5. 在GridView中显示Excel数据:使用GridView控件可以将Excel...
将Excel数据导入数据库通常涉及以下步骤: 1. **准备数据**:在Excel中整理好要导入的数据,确保数据格式正确无误,列名与数据库表的字段对应,且没有数据库不支持的特殊字符。 2. **确定数据库连接**:了解目标...
C#编程语言中,将DataTable中的数据批量插入到数据库中是一项常见的数据处理需求。在本篇文章中,我们重点关注了如何将存储在Access数据库中的员工打卡信息同步到SQL Server数据库中。由于涉及的数据量较大(多达40...
最后,我们使用 DataTable 对象来存储读取到的数据,然后将其导入到数据库中。 在这个示例中,我们使用了以下代码来实现将 Excel 数据导入到数据库: ```csharp public partial class ExcelToDB : System.Web.UI....
通过这样的封装,我们可以方便地在任何需要的地方调用这个方法,将`DataTable`的数据高效地导入到SQL Server数据库中。这在处理大量数据时,能显著提升程序性能,降低资源消耗。 总结来说,`SqlBulkCopy`是.NET ...
本主题聚焦于如何利用C#处理Excel文件,并将其数据导入到SQL Server数据库中。这一过程通常涉及到两个主要步骤:读取Excel数据和与数据库进行交互。 首先,我们来看C#读取Excel数据的部分。在.NET框架中,可以使用...
当需要处理Excel中的大量数据并将其快速导入到数据库时,C#提供了一些高效的方法来实现这一目标。本文将详细讲解如何利用C#实现Excel数据的高效导入。 首先,我们需要了解如何在C#中读取Excel文件。.NET Framework...
在大数据处理的场景下,高效地将大量数据导入数据库是至关重要的。本文将详细介绍如何利用`DataTable`与`SqlBulkCopy`类实现快速的数据批量导入,使百万条数据的导入时间缩短至几秒内。 #### `DataTable`简介 `...
该方法使用 ExcelToDataTable 方法将 Excel 文件转换为 DataTable,然后遍历 DataTable 中的每一行数据,并将其插入到 SqlServer 数据库中。 ExcelToDataTable 方法 该方法传入 Excel 文件的路径和工作表名称,然后...
综上所述,这段代码展示了如何使用C#和Excel Interop库将数据集中的数据转换并展示在Excel工作簿中,但并未涵盖数据导入数据库的部分。在实际应用中,开发者需要结合数据库操作的知识,完成从Excel到数据库的数据...
在ASP.NET中,将Excel数据导入到数据库是一个常见的任务,特别是在处理大量结构化数据时。以下是一些关于这个主题的关键知识点: 1. **文件读取**:首先,你需要使用一个库来读取Excel文件。在.NET框架中,可以使用...
一旦数据在DataSet中,我们可以将数据插入到数据库中。假设我们有一个名为`ZsoftDataAccess.DataAccess`的类来处理数据库操作,我们可以创建一个SQL命令并将DataSet中的数据批量插入到数据库表: ```csharp using ...
压缩包中的"dataTable数据导入到Excel.doc"文档可能提供了具体的实现细节和示例代码,包括如何设置工作表的标题、格式化数据、处理日期和数字等高级功能。阅读这份文档将进一步深化你对这个过程的理解。 通过这种...
例如,将数据库中的数据导出为Excel文件,或者将Excel文件中的数据导入到数据库中。这种数据转换的需求非常普遍,尤其是在涉及到数据分析或报表生成的场景中。本文将详细介绍如何使用C#来实现SQL数据库与Excel文件...
SqlBulkCopy允许我们一次性将大量数据写入到数据库表中,显著减少了网络传输和数据库处理的时间。 代码示例: ```csharp using (var bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = ...
本教程主要关注的是如何将Access数据库中的数据导入到Oracle数据库中。这是一个重要的过程,因为Access通常用于小型或中型企业,而Oracle则常用于大型企业,它提供了更高级别的性能和可扩展性。 **Access与Oracle...
5. **批量插入**: 在将数据导入到SQL数据库时,避免频繁的单条插入可以显著提升效率。SQL Server提供`SqlBulkCopy`类,它可以一次性将大量数据快速插入到表中,非常适合这种场景。 6. **错误处理和事务**: 导入过程...
4. **数据导入**:将预处理后的数据分批插入到数据库中。为了提高效率,可以使用SQL批量插入语句或存储过程。在导入过程中,如果遇到错误,事务会捕获异常并决定是否回滚。 5. **错误处理与日志记录**:为了解决导入...