SqlServer 插入Excel数据方法--SqlBulkCopy避免重复
时间: 2024-03-24 17:36:34 浏览: 16
要将Excel数据插入SqlServer中并避免重复数据,可以使用以下步骤:
1. 将Excel数据读取到DataTable中。
2. 在DataTable中检查是否存在重复数据,如果存在则删除重复数据。
3. 使用SqlBulkCopy将数据插入到SqlServer中。
以下是示例代码:
```csharp
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
//连接Excel文件
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\sample.xlsx;Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
OleDbConnection excelConn = new OleDbConnection(connString);
excelConn.Open();
//读取Excel数据到DataTable中
string sql = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter adapter = new OleDbDataAdapter(sql, excelConn);
DataTable excelData = new DataTable();
adapter.Fill(excelData);
excelConn.Close();
//检查是否存在重复数据
for (int i = excelData.Rows.Count - 1; i >= 0; i--)
{
DataRow row = excelData.Rows[i];
if (IsDuplicate(row))
{
excelData.Rows.Remove(row);
}
}
//将数据插入到SqlServer中
string sqlServerConnString = "Data Source=.;Initial Catalog=TestDB;Integrated Security=True;";
SqlConnection sqlServerConn = new SqlConnection(sqlServerConnString);
sqlServerConn.Open();
SqlTransaction tran = sqlServerConn.BeginTransaction();
try
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlServerConn, SqlBulkCopyOptions.Default, tran))
{
bulkCopy.DestinationTableName = "Person";
bulkCopy.ColumnMappings.Add("Name", "Name");
bulkCopy.ColumnMappings.Add("Age", "Age");
bulkCopy.WriteToServer(excelData);
}
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
sqlServerConn.Close();
}
//检查是否存在重复数据的方法
private bool IsDuplicate(DataRow row)
{
string name = row["Name"].ToString();
int age = int.Parse(row["Age"].ToString());
string sql = "SELECT COUNT(*) FROM Person WHERE Name=@Name AND Age=@Age";
using (SqlConnection conn = new SqlConnection(sqlServerConnString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@Name", name);
cmd.Parameters.AddWithValue("@Age", age);
conn.Open();
int count = (int)cmd.ExecuteScalar();
if (count > 0)
{
return true;
}
else
{
return false;
}
}
}
```
以上代码中使用了IsDuplicate方法来检查是否存在重复数据,该方法查询了目标表中是否存在相同的Name和Age值。如果存在则返回true,否则返回false。在使用SqlBulkCopy插入数据时,应该先将Excel数据读取到DataTable中,然后在DataTable中检查是否存在重复数据,最后再将数据插入到SqlServer中。