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
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
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
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
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
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
tja, habe den Schuß nicht gehört... Danke für den Hinweis!
Fürs erste ist meine Frage aber auch beantwortet, danke nochmal.
j