Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Datentyp erkennen

16 views
Skip to first unread message

Joachim Granzow

unread,
Jul 5, 2010, 3:53:06 PM7/5/10
to
Guten Abend die Herrschaften,

ich bin gerade auf dem dornigen Weg von VB6/ADO nach VB2008/ADO.NET.
Gleich mal eine Frage, bitte:

Bisher (VB6) hatte ich die Datentypen eines ADODB.Fields wie folgt
auseinandergeflöht:

Select Case Feld.Type
Case adBoolean
.....
Case adDate, adDBDate, adDBTime, adFileTime, adDBTimeStamp
...
End Select

Wie geht das denn mit der DataColumn einer DataTable? Habe dazu bisher
leider nichts gefungen. DataType habe ich gefunden, aber damit habe
ich nichts anfangen können.

Jochen

Peter Fleischer

unread,
Jul 5, 2010, 4:45:08 PM7/5/10
to
"Joachim Granzow" <joachim...@gmx.de> schrieb im Newsbeitrag
news:1f0a3a83-4195-432b...@u26g2000yqu.googlegroups.com...
> ...

> Wie geht das denn mit der DataColumn einer DataTable? Habe dazu bisher
> leider nichts gefungen. DataType habe ich gefunden, aber damit habe
> ich nichts anfangen können.

Hi Jochen,
ich habe in vielen Jahren ADO.NET bisher keinen Bedarf gehabt, den Typ eine
Spalte einer DataTable explizit im Programm zu nutzen.

Wozu benötigst du so etwas? Was willst du erreichen? Vielleicht gibt es
einen anderen Lösungsansatz.

--
Viele Gruesse

Peter

Joachim Granzow

unread,
Jul 6, 2010, 5:57:48 AM7/6/10
to
On 5 Jul., 22:45, "Peter Fleischer" <peter.fleischer_nosp...@gmx.de>
wrote:

> Wozu benötigst du so etwas? Was willst du erreichen? Vielleicht gibt es
> einen anderen Lösungsansatz.
> Peter

Moin,

erstens verwende ich die DataTable als DataSource eines DataGridView.
Money-Werte erscheinen darin z.B. nicht immer im Währungsformat, so
dass ich vorsorglich sämtliche Spalten explizit formatiere. An dieser
Stelle gibt es vielleicht in der Tat eine bessere Lösung, für die ich
dankbar wäre.

Zweitens habe ich aber ein Universalanzeigeformular für beliebige
Recordsets entwickelt (http://www.a-jur.de/passepartout.htm). Das
Formular wird zur Laufzeit aufgrund der übergebenen Feldtypen
aufgebaut.

Die Software ist in diesen Bereichen von konkreten Inhalten weitgehend
abstrahiert. Benutzer können sogar eigene Datenfelder hinzufügen.
Insofern ist die Auswertung des in der Tabellendefinition enthaltenen
Typs enorm wichtig.

Jochen

Peter Fleischer

unread,
Jul 6, 2010, 9:47:08 AM7/6/10
to
"Joachim Granzow" <joachim...@gmx.de> schrieb im Newsbeitrag
news:1b090e4b-763d-4488...@k39g2000yqb.googlegroups.com...
> ...

> erstens verwende ich die DataTable als DataSource eines DataGridView.
> Money-Werte erscheinen darin z.B. nicht immer im Währungsformat, so
> dass ich vorsorglich sämtliche Spalten explizit formatiere. An dieser
> Stelle gibt es vielleicht in der Tat eine bessere Lösung, für die ich
> dankbar wäre.

Hi Joachim,
Money-Werte gibt es in VB.NET nicht. Die Formatierung musst du selbst
festlegen.

> Zweitens habe ich aber ein Universalanzeigeformular für beliebige
> Recordsets entwickelt (http://www.a-jur.de/passepartout.htm). Das
> Formular wird zur Laufzeit aufgrund der übergebenen Feldtypen
> aufgebaut.

Eierlegende Wollmilchsau :-) ?

> Die Software ist in diesen Bereichen von konkreten Inhalten weitgehend
> abstrahiert. Benutzer können sogar eigene Datenfelder hinzufügen.
> Insofern ist die Auswertung des in der Tabellendefinition enthaltenen
> Typs enorm wichtig.

Hier mal eine Demo zur Anregung (Konsolenanwendung):

Module Module1

Sub Main()
Dim dt = GetTable()
For Each c As DataColumn In dt.Columns
Select Case c.DataType
Case GetType(String)
Console.WriteLine(String.Format("Die Spalte {0} ist eine
Zeichzenkette", c.ColumnName))
Case Else
Console.WriteLine(String.Format("Spalte {0} ist vom Typ {1}",
c.ColumnName, c.DataType))
End Select
Next
Console.WriteLine("--- Ende mit beleibieger Taste")
Console.ReadKey()
End Sub

Private Function GetTable() As DataTable
Dim dt As New DataTable
With dt.Columns
.Add("col1", GetType(Integer))
.Add("col2", GetType(String))
.Add("col3", GetType(Decimal))
.Add("col4", GetType(Date))
' usw.
End With
Return dt
End Function

End Module


--
Viele Gruesse

Peter

Joachim Granzow

unread,
Jul 6, 2010, 12:03:25 PM7/6/10
to
On 6 Jul., 15:47, "Peter Fleischer" <peter.fleischer_nosp...@gmx.de>
wrote:

> Money-Werte gibt es in VB.NET nicht. Die Formatierung musst du selbst
> festlegen.

ok, das mag ja so sein - aber ich muss doch irgendwie unter ADO.NET
erfahren können, welcher Datentyp beim Provider deklariert wurde. Und
wenn der SQL-Server "money" verwendet, muss ich das doch irgendwie
auslesen können, oder? Ich würde nur ungern zu diesem Zweck wieder ADO
verwenden...

> > Zweitens habe ich aber ein Universalanzeigeformular für beliebige
> > Recordsets entwickelt (http://www.a-jur.de/passepartout.htm). Das
> > Formular wird zur Laufzeit aufgrund der übergebenen Feldtypen
> > aufgebaut.
>
> Eierlegende Wollmilchsau :-) ?

Genau. Hat sich als enorm leistungsfähig erwiesen. Sollte jeder haben!

> Hier mal eine Demo zur Anregung (Konsolenanwendung):

>     For Each c As DataColumn In dt.Columns
>       Select Case c.DataType
>         Case GetType(String)

Herzlichen Dank, damit werde ich es mal versuchen. Heute Nacht
vielleicht mehr dazu...

Schönen Grüße jedenfalls erstmal aus dem sonnigen Hamburg
Jochen

Thorsten Albers

unread,
Jul 6, 2010, 6:09:32 PM7/6/10
to
Joachim Granzow <joachim...@gmx.de> schrieb im Beitrag
<1f0a3a83-4195-432b...@u26g2000yqu.googlegroups.com>...

> ich bin gerade auf dem dornigen Weg von VB6/ADO nach VB2008/ADO.NET.
> Gleich mal eine Frage, bitte:

Hi! Du bist neu hier, oder? Daher f�r Dich hier diese Information -
vielleicht hast Du das noch nicht geh�rt:

Diese Newsgroup wurde so ca. am 1. Juni 2010 von den MS geschlossen und von
deren News-Servern gel�scht. Da� Du hier noch Beitr�ge lesen und schreiben
kannst, liegt daran, da� Du den Newsserver eines Betreibers verwendest, der
den 'L�schungsaufruf' von MS bis jetzt noch nicht gefolgt ist. Aber man
kann nicht sagen, wie lange diese Newsgroup von ihm und anderen Betreibern
noch bereitgehalten wird, d.h. die L�schung kann im Prinzip jederzeit
erfolgen.

Deswegen solltest Du in Betracht ziehen, eine andere passende Newsgroup zu
verwenden, zum Beispiel
de.comp.datenbanken.ms-access
Dort wirst Du dann auch wahrscheinlich einige der Teilnehmer wiederfinden,
die fr�her diese Newsgroup verwendet haben.

Es laufen in verschiedenen Newsgroups (z.B. de.admin.news.groups,
microsoft.public.de.vb, microsoft.public.de.german.entwickler.dotnet.vb)
zur Zeit Diskussionen und Anstrengungen, neue Newsgroups f�r VB 'Classic'
(<= 6) und VB.NET - vorerst in der de.*-Usenet-Hierarchie - einzurichten.
Wenn Du diese ein bischen verfolgst (und Dich im gegeben Fall auch an einer
Abstimmung beteiligst), wirst Du mitbekommen k�nnen, wo in Zukunft sicher
�ber diese Themen weiterdiskutiert werden kann.

Solltest Du das schon gewu�t haben, darfst Du dieses Posting trotzdem
behalten... :-)

--
Thorsten Albers

albers (a) uni-freiburg.de

Joachim Granzow

unread,
Jul 8, 2010, 3:09:53 AM7/8/10
to
> Hi! Du bist neu hier, oder? Daher f r Dich hier diese Information -
> vielleicht hast Du das noch nicht geh rt:
>
> Diese Newsgroup wurde so ca. am 1. Juni 2010 von den MS geschlossen und von

tja, habe den Schuß nicht gehört... Danke für den Hinweis!
Fürs erste ist meine Frage aber auch beantwortet, danke nochmal.
j

0 new messages