Avatar billede TV47 Seniormester
20. maj 2021 - 09:29 Der er 13 kommentarer og
1 løsning

Import CSV fil til SQL DB

Hejsa.

Jeg har lavet en standard button.
Jeg skal bruge et stykke kode, hvor jeg får en stifinder og importerer en CSV fil.
Jeg skal have styr på data i en variabel eller datareader af en slags, da jeg skal skrive de importerede records ned i en tabel i en SQL database.
Ellers er min web applikation en standard gridview med insert, update, delete templetefields som kolonnerne.

Nogen der har et godt kodeeksempel?
Avatar billede arne_v Ekspert
20. maj 2021 - 13:48 #1
Du skal vel bruge 3 stumper:
1) file upload
2) CSV parse
3) DB insert

#1 må kunne læses med System.Web.UI.WebControls.FileUpload.

#3 er helt standard ADO.NET (eller noget ORM ovenpå ADO.NET).

#2 er vil muligvis kræve en lille smule kode, men at læse linier og splitte på seperator er ikke svært.
Avatar billede arne_v Ekspert
20. maj 2021 - 13:55 #2
Jeg har engang lavet noget kode til at læse CSV:

https://www.vajhoej.dk/arne/eksperten/div/div_2016_07/CSVReader.cs

men måske er den kode lidt for "smart", men kig påCSVReader.ReadLine() metoden.
Avatar billede TV47 Seniormester
20. maj 2021 - 16:24 #3
Jeg har faktisk nu fået lavet noget der virker.

Det kører dog med et fast filnavn.

Så det jeg mangler er at kalde stifinderen og hente sti og filnavn ved udpegning af fil.
Avatar billede TV47 Seniormester
24. maj 2021 - 00:30 #4
Lukket.
Avatar billede arne_v Ekspert
24. maj 2021 - 02:23 #5
System.Web.UI.WebControls.FileUpload. har en FileName property.
Avatar billede TV47 Seniormester
24. maj 2021 - 09:41 #6
Starten af min kode ser sådan her ud.
Derefter kommer der noget SQL som skriver i databasen.
Har prøvet at skrive det med FileName, men det kompilerer ikke.
Hvordan skal det formentlig stå?

string filePath = @"C:\Users\Admin\Desktop\Bank.csv";
StreamReader reader;

using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();

if (File.Exists(filePath))
{

reader = new StreamReader(File.OpenRead(filePath));

List<string> listA = new List<string>();
List<string> listB = new List<string>();
List<string> listC = new List<string>();

while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(';');

listA.Add(values[0]);
listB.Add(values[1]);
listC.Add(values[2]);
}
Avatar billede arne_v Ekspert
24. maj 2021 - 15:53 #7
Hvordan ser koden som faktisk modtager upload ud?
Avatar billede TV47 Seniormester
25. maj 2021 - 09:47 #8
Den første del af koden ser ud som ovenfor.
Er det ikke det med StreamReader reader du tænker på.
Avatar billede arne_v Ekspert
25. maj 2021 - 15:32 #9
Nej.

.aspx og .aspx.cs filerne.

Ligesom eksemplet i dokumentationen:

https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.fileupload?view=netframework-4.8
Avatar billede TV47 Seniormester
25. maj 2021 - 15:52 #10
Jeg mener kun der er dette,hvis jeg forstår dig ret:

<asp:Button ID="Button3" runat="server" OnClick="ImportCSV" Text="Import CSV" />
Avatar billede arne_v Ekspert
25. maj 2021 - 16:47 #11
Du har vel også en:

<asp:FileUpload id="FileUpload1"  runat="server"->

hvor du så i ImportCSV metoden kan referere til FileUpload1.FileName
Avatar billede TV47 Seniormester
25. maj 2021 - 16:49 #12
Nej, det har jeg ikke.
Kigger lidt på det.
Avatar billede arne_v Ekspert
25. maj 2021 - 17:09 #13
Har du brugt et rent HTML tag:

<input type="file" name="f"/>

?

Den indbyggede ASP.NET web kontrol integerer nok bedre!
Avatar billede TV47 Seniormester
25. marts 2023 - 18:50 #14
Lukket.
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

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