Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从excel导入数据时防止SQL Server 2008中的行重复_C#_Sql Server 2008_Import From Excel - Fatal编程技术网

C# 从excel导入数据时防止SQL Server 2008中的行重复

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

我正在将Excel中的数据导入SQL Server 2008数据库,我成功地做到了这一点。在从Excel插入特定行之前,是否有任何方法可以检查数据库中是否存在当前行

下面是我用来从excel导入数据的代码

<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

请参见如何使用比较器删除重复项


大容量插入是将文件数据放入数据库的最快方法,但是您可以将文件数据大容量插入到临时表中,然后调用一个存储过程来处理该表中的数据(检查重复项等),并将其移动到最终目标。