Avatar billede kischi Novice
12. december 2008 - 02:00 Der er 16 kommentarer og
1 løsning

excel til ms sql

Hej jeg prøver at gøre sådan så hvis der ligger en excel fil i en mappe på serveren, kan den hente data fra excel filen og ligge  det ned i Ms sql databasen.

Jeg har prøvet lidt selv. Men jeg får en fejl når jeg vil se siden. Fejlen kan ses på www.fullcreation.com hvis man så klikker på knappen.

Jeg ved godt hvordan man normalt forbinder til en Sql database og indsætter data og trækker ud. Men ikke fra en excel fil.

Så jeg vil være meget taknæmmelig hvis der er nogle som kan hjælpe mig med det.

koden ser sådan ud:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web.Security;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Data.Common;



public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {







    }


    protected void Button1_Click(object sender, EventArgs e)
    {
        string excelConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book1.xls;ExtendedProperties=""Excel 8.0;HDR=YES;""";



        using (OleDbConnection connection =
            new OleDbConnection(excelConnectionString))
        {

            OleDbCommand command = new OleDbCommand
            ("Select ID,Data FROM [Data$]", connection);

            connection.Open();

            using (DbDataReader dr = command.ExecuteReader())
            {
                string sqlConnectionString = "Data Source=.;Initial Catalog=Test;Integrated Security=True";

                using (SqlBulkCopy bulkCopy =
                  new SqlBulkCopy(sqlConnectionString))
                {
                    bulkCopy.DestinationTableName = "ExcelData";
                    bulkCopy.WriteToServer(dr);
                }
            }
        }
    }
}

håber i kan hjælpe

Mvh. Adam Kischinovsky

På fårhånd tak. :-D
Avatar billede aaberg Nybegynder
12. december 2008 - 08:33 #1
Den fejl kommer typisk når man forbinder til Excel eller Access, og man har en fejl i sin connectionstring. Prøv at del "ExtendedProperties" op i 2 ord, altså "Extended Properties" i din connectionstring.
Avatar billede kischi Novice
12. december 2008 - 09:20 #2
Ok tak nu har jeg ændret det, men så kommer der en anden fejlmeddellelse.

Ved du hvad den betyder?

Mvh. Adam
Avatar billede aaberg Nybegynder
12. december 2008 - 10:10 #3
Du har vel ikke filen åben i Excel, vel? Du kan ikke have den åben samtiddig med at asp.net læser data fra den.
Avatar billede kischi Novice
12. december 2008 - 17:05 #4
Hehe nej, det var også lige det første jeg tjekkede, fordi det står i fejlmeddellelsen.
Men det er desværre ikke tilfældet.

Ved du hvad det ellers kunne være?
Avatar billede aaberg Nybegynder
14. december 2008 - 19:04 #5
Jeg ser at siden virker nu! Vil det sige at du fik det til at virke? Hvad var problemet?
Avatar billede kischi Novice
14. december 2008 - 23:19 #6
Hej Igen, nej undskyld. Men jeg har lige uploadet en anden side som jeg arbejdede på til det domæne. Så nej jeg har stadig ikke fundet ud af hvordan man løser problemet.

Jeg har flyttet det til: excel/web/surftown.dk

Så hvis du har nogen idé til hvordan jeg kan løse det overhovedet, ville det være en super stor hjælp? :-D

Mvh. Adam
Avatar billede kischi Novice
14. december 2008 - 23:22 #7
undskyld, en lille fejl. Den er flyttet til: http://www.excel.web.surftown.dk/

Mvh. Adam
Avatar billede aaberg Nybegynder
15. december 2008 - 08:42 #8
Jeg vil tro at det er fordi der kræves skriverettigheder til Excelfilen, Hvilket man ikke altid har på webhoteller. Virker det, hvis du køre det lokalt i Visual Studio? Eventuelt prøv at brug en ODBC driver i stedet for OleDb, da den vil åbne en read-only forbindelse.
http://connectionstrings.com/excel
Avatar billede kischi Novice
17. december 2008 - 01:14 #9
Nej den virker ikke lokalt, og med hensyn til driver så har jeg prøvet men det virker stadig ikke.

Er det så surftown jeg skal kontakte om jeg har skriverettigheder til excelfilen?

Mvh. Adam
Avatar billede aaberg Nybegynder
17. december 2008 - 08:16 #10
Hvis det ikke virker lokalt, er det nok ikke surftown den er galt med.

Jeg kom lige til at se, at du bruger en relative path i din connectionstring. Jeg ved at det ofte ikke virker på web-applikationer, da koden ikke køre fra samme path som siderne ligger. Det kan godt passe at der ikke er rettigheder til mappen koden kører fra.

prøv:
string excelConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};ExtendedProperties=""Excel 8.0;HDR=YES;"""), Server.MapPath("Book1.xls"));
Avatar billede kischi Novice
17. december 2008 - 12:07 #11
Hej når jeg prøver at skrive den connectionstring som du har givet mig.
ser det ud til at den er forkert fordi der kommer røde streger under noget af teksten.

det her kommer der røde streger under:
Excel 8.0;HDR=YES;"""), Server
og så igen til sidst: ))

Ved du hvad jeg gør forkert?

Mvh. Adam
Avatar billede aaberg Nybegynder
17. december 2008 - 12:28 #12
Jeg havde lavet et par skrivefejl. Jeg havde blandt andet ikke fået "@" tegnet med.

Prøv:
string excelConnectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};ExtendedProperties=""Excel 8.0;HDR=YES;""", Server.MapPath("Book1.xls"));
Avatar billede kischi Novice
17. december 2008 - 12:56 #13
Jeg tror nu at connectionstringen virker, men nu er jeg stødt på et nyt problem.
Det kan ses på: http://www.excel.web.surftown.dk/ og så klik på knappen.

jeg tror at det har noget at gøre med det her stykke kode:
"Select ID,Data FROM [database.xls$]"

Men hvad skal der stå imellem [] ?

Jeg har ændret filnavnet fra Book1.xls til database.xls

Mvh. Adam
Avatar billede aaberg Nybegynder
17. december 2008 - 13:41 #14
Der skal stå navnet på dit sheet. I den engelske version af Excel, får du automatisk en sheet1, sheet2 og sheet3 når man opretter et nyt dokument. Jeg kan ikke huske hvad disse sheets hedder på dansk. Hver sheet er repræsenteret af en tab nede i venstre hjørne af Excel.

f.eks.

select * from [sheet1%]
Avatar billede aaberg Nybegynder
17. december 2008 - 13:41 #15
Skrivefejl. Eksemplet skal være sådan:

select * from [sheet1$]
Avatar billede kischi Novice
17. december 2008 - 14:45 #16
Ok nu tror jeg den connecter fint til excel sheetet, men nu har jeg et andet problem.
Nu tror jeg ikke den connecter med min sql database ordentligt.

Du kan se fejlen på: http://www.excel.web.surftown.dk/  og klik på knappen.

Her er koden som burde connecte til sql serveren:

connection.Open();

            using (DbDataReader dr = command.ExecuteReader())
            {
                string sqlConnectionString = "Data Source=.;Initial Catalog=Test;Integrated Security=True";

                using (SqlBulkCopy bulkCopy =
                  new SqlBulkCopy(sqlConnectionString))
                {
                    bulkCopy.DestinationTableName = "ExcelData";
                    bulkCopy.WriteToServer(dr);

Men jeg har ikke brugt bulkCopy før, så jeg ved ikke om jeg har connected rigtigt. Ved du hvordan jeg ellers skulle connecte til databasen?

Mvh. Adam
Avatar billede kischi Novice
25. januar 2011 - 17:08 #17
Jeg lukker lige
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester