Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Connectionstrings


Oppi35 - Mi 02.02.11 16:40
Titel: Connectionstrings
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.





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 - Mi 02.02.11 17:08

Schau mal auf http://www.connectionstrings.com
d.h. für dich speziell http://www.connectionstrings.com/textfile
(es scheint also nicht mehr Eigenschaften zu geben...)

Und bzgl. der PLZ kannst du ja mal schauen, welcher Datentyp bei

C#-Quelltext
1:
dt.Columns["PLZ"].DataType;                    

angegeben ist (also ob hier wirklich 'int' steht).


stendate - Mi 02.02.11 21:48

Verusuch mal:


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.:


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] http://msdn.microsoft.com/en-us/library/ms709353%28v=vs.85%29.aspx


Oppi35 - Do 03.02.11 13:11

Genau diese Infos habe ich gesucht.
Vielen Dank für Eure Hilfe.

Gruß Frank


Ivy - Fr 18.11.11 12:55

hey,
ich hab ne frage zu dem code snippet zum thema excelconnection:

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?


C#-Quelltext
1:
string datasource = ds.Tables[0].ToString();                    


Ivy - Mo 21.11.11 10:47

keiner idee wie ich das lösen könnte? :-(


Th69 - 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 - Mo 21.11.11 14:52

also nicht über das DAtaSet sondern über eine DataTable abfragen??? oder wie?


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