Autor Beitrag
Oppi35
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95
Erhaltene Danke: 3



BeitragVerfasst: Mi 02.02.11 16:40 
Hallo Zusammen,

ich habe eine grundsätzliche Frage zu den Connection Strings. Gibt es irgendwo ein Tutorial oder eine Übersicht, was alles in diesen String "rein kann"?

Ich habe das Problem, dass die hier aufgerufene CSV Datei Postleitzahlen enthält, die teilweise vorne eine Null haben, diese aber mit diesem Code nicht eingelesen werden. Nur zur Info. Mir geht es nicht nur um PLZ, daher bitte keine Lösungen bzgl. Formatierung auf 5 Zeichen :)

Ich habe nach langer Zeit den hier verwendeten Connection String gefunden. Mich würde jetzt mal interessieren, was z.B. hinter "Extended Properties" alles steht bzw. was da noch alles stehen kann. Irgendwo kann man doch mit Sicherheit die Formatierung zum Einlesen einstellen. Schließlich bekomme ich über Excel auch per OLEDB die führenden Nullen.

Ich hatte gehofft auf der MSDN Homepage etwas zu finden, aber eine vollständige Übersicht, wie es mit Membern einer Klasse i.d.R. ist, konnte ich nicht finden.




ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.IO;
using System.Data;

namespace OleDB
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = ImportCSVData(@"C:\test.csv");
            foreach (DataColumn col in dt.Columns)
            {
                Console.WriteLine("\n");
                foreach (DataRow row in dt.Rows)
                {
                    Console.Write(row[col].ToString()+"  ");
                }

            }
            Console.Read();


        }

        private static DataTable ImportCSVData(string strCSVFile)
        {

            DataTable dt = new DataTable();
            string strCSVFilePath = Path.GetDirectoryName(strCSVFile);
            string strCSVFileName = Path.GetFileName(strCSVFile);
            OleDbConnection conn = null;
            try
            {
                
                
                string strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strCSVFilePath + ";Extended Properties='text;HDR=Yes;FMT=Delimited(;)';";
                
                string sql_select;
                conn = new OleDbConnection(strConnString.Trim());
                sql_select = "select * from [" + strCSVFileName + "]";
                conn.Open();
                OleDbCommand cmd = new OleDbCommand(sql_select, conn);
                OleDbDataAdapter obj_oledb_da = new OleDbDataAdapter(cmd);

                
                obj_oledb_da.Fill(dt);
                


            }
            finally
            {
                if (conn.State == System.Data.ConnectionState.Open)
                    conn.Close();
                
            }
            return dt;
        }


    }
}


Gruß Frank
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 02.02.11 17:08 
Schau mal auf www.connectionstrings.com
d.h. für dich speziell www.connectionstrings.com/textfile
(es scheint also nicht mehr Eigenschaften zu geben...)

Und bzgl. der PLZ kannst du ja mal schauen, welcher Datentyp bei
ausblenden C#-Quelltext
1:
dt.Columns["PLZ"].DataType;					

angegeben ist (also ob hier wirklich 'int' steht).
stendate
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 1



BeitragVerfasst: Mi 02.02.11 21:48 
Verusuch mal:

ausblenden C#-Quelltext
1:
strConString += "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strCSVFolderName + ";Extended Properties=\"text;\"";					


Wenn das nicht reicht, dann kann man noch im Verzeichnis in dem die Quell-CSV-Datei liegt eine Schema.ini [1] erstellen.
Damit kann man dann noch genauer spezifizieren wie die CSV-Daten behandelt werden sollen, z.B.:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
[MeineCSVDatei.csv]
ColNameHeader=True
CharacterSet=ANSI
Format=Delimited(;)
Col1="Foo" Text
Col2="PLZ" Text
Col3="Bar" Double





[1] msdn.microsoft.com/e...53%28v=vs.85%29.aspx
Oppi35 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95
Erhaltene Danke: 3



BeitragVerfasst: Do 03.02.11 13:11 
Genau diese Infos habe ich gesucht.
Vielen Dank für Eure Hilfe.

Gruß Frank
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Fr 18.11.11 12:55 
hey,
ich hab ne frage zu dem code snippet zum thema excelconnection:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  String strConn = @"Dsn=Excel Files;dbq="+oFD.FileName+";defaultdir=C:\\;driverid=1046;maxbuffersize=2048;pagetimeout=5";
             OdbcConnection objConn = new OdbcConnection(strConn);
             objConn.Open();
             OdbcDataAdapter adp = new OdbcDataAdapter("select * from [Sheet1$]", objConn);
             DataSet ds = new DataSet();
             adp.Fill(ds);
             dataGridView1.DataSource = ds.Tables[0];
             objConn.Close();

Und zwar wird das ja jetzt in eine datatgridview ausgegeben. Ich möchte die daten aber in einem sting speichern. Jedoch steht in dem String bei mir immer nur "Table" drin und nicht meine eigentlichen daten.
Was mache ich hier falsch?

ausblenden C#-Quelltext
1:
string datasource = ds.Tables[0].ToString();					
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mo 21.11.11 10:47 
keiner idee wie ich das lösen könnte? :-(
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 21.11.11 13:23 
Hallo Ivy,

um an die Daten der Tabelle zu kommen, mußt du die einzelnen Zellen abfragen (d.h. alle Spalten und Zeilen durchgehen). Stichworte: DataTable.Rows, DataTable.Columns, DataRow.Item (Indexer).
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mo 21.11.11 14:52 
also nicht über das DAtaSet sondern über eine DataTable abfragen??? oder wie?

ausblenden C#-Quelltext
1:
2:
3:
    DataTable dt = new DataTable();
            adp.Fill(dt);
           string datasource = dt.Rows[0].ToString();


hab jetzt so aber es wird "System.Data.DataRow" ausgegeben