将数据从excel导入到sql [英] import data from excel to sql

查看:83
本文介绍了将数据从excel导入到sql的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

salam

i想要将数据从excel导入到sql server但是有一个条件,如果数据已经是axist我将进行更新,否则我插入新数据,这里是我的代码

 string srvxl = @Provider = Microsoft.ACE.OLEDB.12.0; Data Source = d:\ Suivi \ export1111.xlsx; Extended Properties =+\Excel 12.0 Xml; HDR = Yes; \\ \\ ; 
public void updateinsertsql(string path)
{
SqlConnection cn = new SqlConnection(srv);
OleDbConnection cnn = new OleDbConnection(srvxl);
cn.Open();
cnn.Open();
string cmdd = @从[访问] v内连接OPENROWSET选择v.Num_Doss('Microsoft.ACE.OLEDB.12.0','Excel 12.0 Xml; HDR = YES; IMEX = 1 \;数据源= d:\\Suivi \\export1111.xlsx;','SELECT Num_Doss FROM [sheet1 $]')AS ExcelTable on d.Num_Doss = ExcelTable.Num_Doss;
SqlCommand verif = new SqlCommand(cmdd,cn);


SqlDataReader logread = verif.ExecuteReader();
if(logread.HasRows)
{
while(logread.Read())
{
// string update = @update [Visit] set v where v .Num_Doss = + logread.GetString(0)+;
string update = @UPDATE [Visit]
SET [Visit] .Date_visit_1mois_prevu = exl.Date_visit_1mois_prevu,
[Visit] .Date_visit_1mois = exl.Date_visit_1mois,
[Visit]。 Observation_visite_1mois = exl.Observation_visite_1mois,
[访问] .Date_visit_3mois_prevu = exl.Date_visit_3mois_prevu,
[访问] .Date_visit_3mois = exl.Date_visit_3mois,
[访问] .Observation_visite_3mois = exl.Observation_visite_3mois,
[访问] .Date_visit_6mois_prevu = exl.Date_visit_6mois_prevu,
[访问] .Date_visit_6mois = exl.Date_visit_6mois,
[访问] .Observation_visite_6mois = exl.Observation_visite_6mois,
[访问] .Date_visit_1an_prevu = exl.Date_visit_1an_prevu,
[Visit] .Date_visit_1an = exl.Date_visit_1an,
[Visit] .Observation_visite_1an = exl.Observation_visite_1an,

FROM [Visit]
INNER JOIN OPENROWSET('Microsoft.AC E.OLEDB.12.0','Excel 12.0;数据源= C:\ Suivi \ export.xls;','SELECT Date_visit_1mois_prevu,Date_visit_1mois,Observation_visite_1mois,Date_visit_3mois_prevu,Date_visit_3mois,Observation_visite_3mois,Date_visit_6mois_prevu,Date_visit_6mois,Observation_visite_6mois,Date_visit_1an_prevu,Date_visit_1an ,Observation_visite_1an FROM [sheet1 $]')AS exlON [Visit] .Num_Doss = exl.Num_Doss
WHERE [Visit] .Num_Doss =+ logread.GetString(0)+;
SqlCommand up = new SqlCommand(update,cn);
up.ExecuteNonQuery();
MessageBox.Show(miseàjouréffectuéavecusucée);
}
}
else
{
string insrt = @insert into [Visit] Select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',' Excel 12.0;数据源= D:\ Suivi \ export1111.xlsx; HDR = YES','SELECT * FROM [Sheet1 $]');
SqlCommand ins = new SqlCommand(insrt,cn);
ins.ExecuteNonQuery();
MessageBox.Show(插入éffectuéavecsuccés);
}

}



但是当我运行我的代码时出现此错误:

无法加载32位OLE DB提供程序   Microsoft.ACE.OLEDB.12.0  - 在64位SQL Server上进行处理。



此处

 SqlDataReader logread = verif.ExecuteReader(); 





help plz

解决方案

')在Excel.Dum_Doss = ExcelTable.Num_Doss上的ExcelTable;
SqlCommand verif = new SqlCommand(cmdd,cn);


SqlDataReader logread = verif.ExecuteReader();
if(logread.HasRows)
{
while(logread.Read())
{
// string update = @update [Visit] set其中v.Num_Doss =+ logread.GetString(0)+ ;
字符串update = @UPDATE [Visit]
SET [Visit] .Date_visit_1mois_prevu = exl.Date_visit_1mois_prevu,
[Visit] .Date_visit_1mois = exl.Date_visit_1mois,
[Visit] .Observation_visite_1mois = exl.Observation_visite_1mois ,
[访问] .Date_visit_3mois_prevu = exl.Date_visit_3mois_prevu,
[访问] .Date_visit_3mois = exl.Date_visit_3mois,
[访问] .Observation_visite_3mois = exl.Observation_visite_3mois,
[访问] .Date_visit_6mois_prevu = exl.Date_visit_6mois_prevu,
[访问] .Date_visit_6mois = exl.Date_visit_6mois,
[访问] .Observation_visite_6mois = exl.Observation_visite_6mois,
[访问] .Date_visit_1an_prevu = exl.Date_visit_1an_prevu,
[访问] .Date_visit_1an = exl.Date_visit_1an,
[访问] .Observation_visite_1an = exl.Observation_visite_1an,

FROM [访问]
INNER JOIN OPENROWSET('Microsoft。 ACE.OLEDB.12.0','Excel 12.0;数据酸ce = C:\ Suivi \ export.xls;','SELECT Date_visit_1mois_prevu,Date_visit_1mois,Observation_visite_1mois,Date_visit_3mois_prevu,Date_visit_3mois,Observation_visite_3mois,Date_visit_6mois_prevu,Date_visit_6mois,Observation_visite_6mois,Date_visit_1an_prevu,Date_visit_1an,Observation_visite_1an FROM [sheet1

')AS exlON [Visit] .Num_Doss = exl.Num_Doss
WHERE [Visit] .Num_Doss =+ logread.GetString(0)+;
SqlCommand up = new SqlCommand(update,cn);
up.ExecuteNonQuery();
MessageBox.Show(miseàjouréffectuéavecusucée);
}
}
else
{
string insrt = @insert into [Visit] Select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',' Excel 12.0;数据源= D:\ Suivi \ export1111.xlsx; HDR = YES','SELECT * FROM [Sheet1


');
SqlCommand ins = new SqlCommand(insrt,cn);
ins.ExecuteNonQuery();
MessageBox.Show(插入éffectuéavecsuccés);
}

}



但是当我运行我的代码时出现此错误:

无法加载32位OLE DB提供程序   Microsoft.ACE.OLEDB.12.0  - 在64位SQL Server上进行处理。



此处

 SqlDataReader logread = verif.ExecuteReader(); 





help plz


salam
i want to import data from excel to sql server but there is a condition if the data already axist i will make an update else i insert the new data and here is my code

 string srvxl = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\Suivi\export1111.xlsx;Extended Properties="+"\"Excel 12.0 Xml;HDR=Yes;\"";
        public void updateinsertsql(string path)
        {
            SqlConnection cn = new SqlConnection(srv);
            OleDbConnection cnn=new OleDbConnection(srvxl);
            cn.Open();
            cnn.Open();
            string cmdd = @"select v.Num_Doss from [Visit] v inner join OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;IMEX=1\;Data Source=d:\\Suivi\\export1111.xlsx;','SELECT Num_Doss FROM [sheet1$]')AS ExcelTable on  d.Num_Doss=ExcelTable.Num_Doss";
            SqlCommand verif = new SqlCommand(cmdd, cn);
                 

                    SqlDataReader logread = verif.ExecuteReader();
                    if (logread.HasRows)
                    {
                        while (logread.Read())
                        {
                            //string update = @"update [Visit] set where v.Num_Doss="+logread.GetString(0)+"";
                            string update = @"UPDATE [Visit]
SET       [Visit].Date_visit_1mois_prevu=exl.Date_visit_1mois_prevu,
          [Visit].Date_visit_1mois=exl.Date_visit_1mois,
          [Visit].Observation_visite_1mois=exl.Observation_visite_1mois,
          [Visit].Date_visit_3mois_prevu=exl.Date_visit_3mois_prevu,
          [Visit].Date_visit_3mois=exl.Date_visit_3mois,
          [Visit].Observation_visite_3mois=exl.Observation_visite_3mois,
          [Visit].Date_visit_6mois_prevu=exl.Date_visit_6mois_prevu,
          [Visit].Date_visit_6mois=exl.Date_visit_6mois,
          [Visit].Observation_visite_6mois=exl.Observation_visite_6mois,
          [Visit].Date_visit_1an_prevu=exl.Date_visit_1an_prevu,
          [Visit].Date_visit_1an=exl.Date_visit_1an,
          [Visit].Observation_visite_1an=exl.Observation_visite_1an,
    
          FROM [Visit]
          INNER JOIN OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Data Source=C:\Suivi\export.xls;','SELECT Date_visit_1mois_prevu,Date_visit_1mois,Observation_visite_1mois,Date_visit_3mois_prevu,Date_visit_3mois,Observation_visite_3mois,Date_visit_6mois_prevu,Date_visit_6mois,Observation_visite_6mois,Date_visit_1an_prevu,Date_visit_1an,Observation_visite_1an FROM [sheet1$]') AS exlON [Visit].Num_Doss = exl.Num_Doss
          WHERE [Visit].Num_Doss=" + logread.GetString(0) + "";
                            SqlCommand up = new SqlCommand(update, cn);
                            up.ExecuteNonQuery();
                            MessageBox.Show("mise à jour éffectué avec succée");
                        }
                    }
                    else
                    {
                        string insrt = @"insert into [Visit] Select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Data Source=D:\Suivi\export1111.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')";
                        SqlCommand ins = new SqlCommand(insrt, cn);
                        ins.ExecuteNonQuery();
                        MessageBox.Show("insertion éffectué avec succés");
                    }

        }


but when i run my code i get this error:

The 32-bit OLE DB provider "Microsoft.ACE.OLEDB.12.0" cannot be loaded in-process on a 64-bit SQL Server.


here

SqlDataReader logread = verif.ExecuteReader();



help plz

解决方案

')AS ExcelTable on d.Num_Doss=ExcelTable.Num_Doss"; SqlCommand verif = new SqlCommand(cmdd, cn); SqlDataReader logread = verif.ExecuteReader(); if (logread.HasRows) { while (logread.Read()) { //string update = @"update [Visit] set where v.Num_Doss="+logread.GetString(0)+""; string update = @"UPDATE [Visit] SET [Visit].Date_visit_1mois_prevu=exl.Date_visit_1mois_prevu, [Visit].Date_visit_1mois=exl.Date_visit_1mois, [Visit].Observation_visite_1mois=exl.Observation_visite_1mois, [Visit].Date_visit_3mois_prevu=exl.Date_visit_3mois_prevu, [Visit].Date_visit_3mois=exl.Date_visit_3mois, [Visit].Observation_visite_3mois=exl.Observation_visite_3mois, [Visit].Date_visit_6mois_prevu=exl.Date_visit_6mois_prevu, [Visit].Date_visit_6mois=exl.Date_visit_6mois, [Visit].Observation_visite_6mois=exl.Observation_visite_6mois, [Visit].Date_visit_1an_prevu=exl.Date_visit_1an_prevu, [Visit].Date_visit_1an=exl.Date_visit_1an, [Visit].Observation_visite_1an=exl.Observation_visite_1an, FROM [Visit] INNER JOIN OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Data Source=C:\Suivi\export.xls;','SELECT Date_visit_1mois_prevu,Date_visit_1mois,Observation_visite_1mois,Date_visit_3mois_prevu,Date_visit_3mois,Observation_visite_3mois,Date_visit_6mois_prevu,Date_visit_6mois,Observation_visite_6mois,Date_visit_1an_prevu,Date_visit_1an,Observation_visite_1an FROM [sheet1


') AS exlON [Visit].Num_Doss = exl.Num_Doss WHERE [Visit].Num_Doss=" + logread.GetString(0) + ""; SqlCommand up = new SqlCommand(update, cn); up.ExecuteNonQuery(); MessageBox.Show("mise à jour éffectué avec succée"); } } else { string insrt = @"insert into [Visit] Select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Data Source=D:\Suivi\export1111.xlsx;HDR=YES', 'SELECT * FROM [Sheet1


')"; SqlCommand ins = new SqlCommand(insrt, cn); ins.ExecuteNonQuery(); MessageBox.Show("insertion éffectué avec succés"); } }


but when i run my code i get this error:

The 32-bit OLE DB provider "Microsoft.ACE.OLEDB.12.0" cannot be loaded in-process on a 64-bit SQL Server.


here

SqlDataReader logread = verif.ExecuteReader();



help plz


这篇关于将数据从excel导入到sql的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆