C# 从excel导入数据时防止SQL Server 2008中的行重复
我正在将Excel中的数据导入SQL Server 2008数据库,我成功地做到了这一点。在从Excel插入特定行之前,是否有任何方法可以检查数据库中是否存在当前行 下面是我用来从excel导入数据的代码C# 从excel导入数据时防止SQL Server 2008中的行重复,c#,sql-server-2008,import-from-excel,C#,Sql Server 2008,Import From Excel,我正在将Excel中的数据导入SQL Server 2008数据库,我成功地做到了这一点。在从Excel插入特定行之前,是否有任何方法可以检查数据库中是否存在当前行 下面是我用来从excel导入数据的代码 <pre lang="c#"> con.Open(); if (FileUpload1.HasFile) { string path = FileUpload1.PostedFile.FileName; string
<pre lang="c#">
con.Open();
if (FileUpload1.HasFile)
{
string path = FileUpload1.PostedFile.FileName;
string saveFolder = @"E:\"+""+path+""; //Pick a folder on your machine to store the uploaded files
FileUpload1.SaveAs(saveFolder);
String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + saveFolder + ";Extended Properties=Excel 12.0;");
OleDbConnection excelConnection = new OleDbConnection(excelConnString);
OleDbCommand cmd = new OleDbCommand("Select * from [Sheet1$]", excelConnection);
excelConnection.Open();
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();
SqlBulkCopy sqlBulk = new SqlBulkCopy(con);
sqlBulk.DestinationTableName = "Course_Data";
sqlBulk.WriteToServer(dReader);
excelConnection.Close();
con.Close();
Response.Write("<Script> alert('File Uploaded Successfully');</Script>");
}
else
{
Response.Write("<Script> alert('First select the file which you need to upload.');</Script>");
}
con.Close();
</pre>
con.Open();
if(FileUpload1.HasFile)
{
字符串路径=FileUpload1.PostedFile.FileName;
string saveFolder=@“E:\”+“”+path+“”;//在计算机上选择一个文件夹来存储上载的文件
FileUpload1.SaveAs(saveFolder);
字符串excelConnString=String.Format(“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+saveFolder+”;扩展属性=Excel12.0;”;
OleDbConnection excelConnection=新的OleDbConnection(excelConnString);
OleDbCommand cmd=新的OleDbCommand(“从[Sheet1$]中选择*”,excelConnection);
excelConnection.Open();
OLEDB阅读恐惧症;
dReader=cmd.ExecuteReader();
SqlBulkCopy sqlBulk=新的SqlBulkCopy(con);
sqlBulk.DestinationTableName=“课程\数据”;
sqlBulk.WriteToServer(恐惧者);
excelConnection.Close();
con.Close();
写入(“警报(‘文件上传成功’);”;
}
其他的
{
Write(“警报('首先选择需要上载的文件');”;
}
con.Close();
谢谢。您可以使用SQL Server触发器:
确保将HDR设置为“是”,以获取标题作为excel连接字符串中的列名
String excelConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + saveFolder + ";Extended Properties=Excel 12.0;HDR=YES;"
或者,您需要将下面的列替换为索引(F$)替换为要比较的excel列的索引
IE:验证“按课程名称插入”字段
CREATE TRIGGER IO_Trig_INS_CourseData on Course_Data
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
-- Check for duplicate Course_name. If there is no duplicate, do an insert.
IF (NOT EXISTS (SELECT C.ID
FROM Course_Data C, inserted I
WHERE P.Course_Name = I.Course_Name ))
INSERT INTO Course_Data
SELECT *
FROM inserted
END
您可以将数据复制到
数据表中
,过滤掉重复的数据,然后将数据插入数据库
请参见如何将数据从DataReader
加载到DataTable
请参见如何使用比较器删除重复项
大容量插入是将文件数据放入数据库的最快方法,但是您可以将文件数据大容量插入到临时表中,然后调用一个存储过程来处理该表中的数据(检查重复项等),并将其移动到最终目标。