Hallo Pat,

also ich habe die Sache jetzt mal nachgestellt, und es funktioniert einwandfrei. Der Code ist wie unten angegeben. Falls es bei Dir immer noch nicht klappt, schicke ich gerne das Projekt mit der zugeh�rigen Access-Datei...

Gru�, Helge

Sub Main()
Dim path As String
Dim filepath As String
path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)
filepath = System.IO.Path.Combine(path, "Test_vbnet.mdb")
Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filepath & ";")
conn.Open()
Console.WriteLine("Status ist: " & conn.State.ToString())
Dim ds As New DataSet
Dim cmd1 As New OleDb.OleDbCommand
cmd1.Connection = conn
cmd1.CommandType = System.Data.CommandType.Text
cmd1.CommandText = "SELECT [property], [serial], [h-path], [t-path] from [tbl_photos]"
Dim objDataAdapterB1 As New OleDb.OleDbDataAdapter
objDataAdapterB1.SelectCommand = cmd1
objDataAdapterB1.Fill(ds)
Dim dr As DataRow
Dim cmd As OleDb.OleDbCommand
Dim objParam As OleDb.OleDbParameter
For Each dr In ds.Tables(0).Rows
cmd = New OleDb.OleDbCommand
cmd.Connection = conn
cmd.CommandText = "INSERT INTO pictures ([property], [serial], [h-path], [t-path]) VALUES (?,?,?,?)"
objParam = cmd.Parameters.Add(New OleDb.OleDbParameter("@property", OleDb.OleDbType.Char, 20))
'objParam.Direction = ParameterDirection.Input
objParam.Value = dr("property").ToString()
objParam = cmd.Parameters.Add(New OleDb.OleDbParameter("@serial", OleDb.OleDbType.Double))
'objParam.Direction = ParameterDirection.Input
objParam.Value = dr("serial").ToString()
objParam = cmd.Parameters.Add(New OleDb.OleDbParameter("@h-path", OleDb.OleDbType.Char, 100))
'objParam.Direction = ParameterDirection.Input
objParam.Value = dr("h-path").ToString()
objParam = cmd.Parameters.Add(New OleDb.OleDbParameter("@t-path", OleDb.OleDbType.Char, 100))
'objParam.Direction = ParameterDirection.Input
objParam.Value = dr("t-path").ToString()
Console.WriteLine(cmd.ExecuteNonQuery.ToString() & " Datensatz hinzugef�gt.")
Next
Console.ReadLine()
End Sub




[EMAIL PROTECTED] wrote:

Hallo Helge,

danke erstmal.. ich benutze eine Access DB. Aber leider funktioniert das
immer noch nciht so wie ich mir das vorstelle ich bekomme genau die gleiche
Fehlermeldung obwohl ich das ganze jetzt umgebaut habe. Code s.u. Eine Frage
noch zu deinem Beispiel. ist das nicht besonders Performancehungrig?
Schliesslich muss ja die Execute tausendfach ausgef�hrt werden bei dieser
Art von F�llung ?!?

So langsam mahct mir das echt Sorgen, das ist doch ein ganz simples Ding und
es will ums verrecken nicht... Ich habe jetzt auch noch mal eine Abfrage auf
nothing miteingebaut das wars aber auch nicht....Hier nochmals der Code:

For Each dtRow in objDataSetB1.Tables(0).Rows

 Dim cmd As new OleDbCommand()
 Dim objParam As OleDbParameter

 cmd.Connection = objConnect
 cmd.CommandText = "INSERT INTO Pictures (property, serial, h-path, t-path)
VALUES (?,?,?,?)"

 objParam = cmd.Parameters.Add(New OleDbParameter("@property",
OleDbType.Char, 20))
    objParam.Direction = ParameterDirection.Input
    objParam.IsNullable = true
    If dtRow("property") = "" Then
     ObjParam.Value = System.DBNull.Value
    Else
     ObjParam.Value = dtRow("property").ToString
    End If

 objParam = cmd.Parameters.Add(New OleDbParameter("@serial",
OleDbType.Double))
    objParam.Direction = ParameterDirection.Input
    objParam.IsNullable = true
    If dtRow("serial") Is System.DBNull.Value Then
     ObjParam.Value = System.DBNull.Value
    Else
     ObjParam.Value = CType(dtRow("serial"), Double)
    End If

 objParam = cmd.Parameters.Add(New OleDbParameter("@h-path",
OleDbType.Char, 100))
    objParam.Direction = ParameterDirection.Input
    objParam.IsNullable = true
    If dtRow("h-path") Is System.DBNull.Value Then
     ObjParam.Value = System.DBNull.Value
    Else
     ObjParam.Value = dtRow("h-path").ToString
    End If

 objParam = cmd.Parameters.Add(New OleDbParameter("@t-path",
OleDbType.Char, 100))
    objParam.Direction = ParameterDirection.Input
    objParam.IsNullable = true
    If dtRow("t-path") Is System.DBNull.Value Then
     ObjParam.Value = System.DBNull.Value
    Else
     ObjParam.Value = dtRow("t-path").ToString
    End If

 objConnect.open()
 cmd.ExecuteNonQuery()
Next


Gruss Pat

----- Original Message ----- From: "Helge Lenuweit" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, July 27, 2004 8:48 AM
Subject: Re: [Asp.net] selbsterstelltes dataset als tabelle in datenbank
speichern



Moin,moin!

Falls Du SQL Server verwendest, kannst Du den Profiler mitlaufen lassen,
der Dir dann das verwendete INSERT-Statement ausgibt. Die eckigen
Klammern funktionieren auch nur mit MSSQL.

Ansonsten k�nntest Du das INSERT-Statement manuell vorgeben und die
Werte mit Parametern einzutragen. Damit wird der zweite DataAdapter, das
FillSchema() und der CommandBuilder eingespart. Beim OleDbType mu�t Du
in diesem Beispiel statt <whatever> den verwendeten Datentyp eintragen.
Die Fragezeichen im Text des Statements bleiben so stehen, die Parameter
ersetzen die Fragezeichen in der Reihenfolge des Hinzuf�gens (nur bei
OleDb und Odbc).

(tut mir leid, ich hoffe, C# st�rt nicht...)

foreach (DataRow dtRow in objDataSetB1.Tables[0].Rows) {
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = objConnect;
cmd.CommandText = "INSERT INTO Pictures (property, serial, h-path, t-path)
VALUES (?,?,?,?)";

OleDbParameter p = new OleDbParameter("@property", OleDbType.<whatever>);
p.value = dtRow["property"];
cmd.Parameters.Add( p );

p = new OleDbParameter("@serial", OleDbType.<whatever>);
p.value = dtRow["serial"];
cmd.Parameters.Add( p );

p = new OleDbParameter("@h-path", OleDbType.<whatever>);
p.value = dtRow["h-path"];
cmd.Parameters.Add( p );

p = new OleDbParameter("@t-path", OleDbType.<whatever>);
p.value = dtRow["t-path"];
cmd.Parameters.Add( p );

cmd.ExecuteNonQuery();
}

Ich hoffe, das hilft weiter?

Viele Gr��e,
Helge



[EMAIL PROTECTED] wrote:



Hallo ,

da bin ich wieder mit meinem problemchen, war im urlaub hab deswegen nicht
weiter gepostet... Der Fehler der Syntax in der INSERT INTO Anweisung kommt
leider immer noch vor, trotz [].

Anbei der aktuelle Code:

Dim objCommand As New OleDbCommand()
objCommand.Connection = ALobjConnect
objCommand.CommandType = CommandType.Text
objCommand.CommandText = "SELECT [property], [serial], [h-path], [t-path]


FROM [tbl_photos]"


objDataAdapterB1.SelectCommand = objCommand
objDataAdapterB1.Fill(objDataSetB1)

Dim objCommand2 As New OleDbCommand()
objCommand2.Connection = objConnect
objCommand2.CommandType = CommandType.Text
objCommand2.CommandText = "SELECT [property], [serial], [h-path], [t-path]


FROM [Pictures]"


objDataAdapterB2.SelectCommand = objCommand2
objDataAdapterB2.FillSchema(objDataSetB2, SchemaType.Source, "Pict")
objDataSetB2.AcceptChanges()


Dim objDataRow, dtRow as DataRow For Each dtRow in objDataSetB1.Tables(0).Rows

objDataRow = objDataSetB2.Tables("Pict").NewRow()
objDataRow.ItemArray = dtRow.ItemArray
objDataSetB2.Tables("Pict").Rows.Add(objDataRow)
Next

Dim objCommandBuilder As New OleDbCommandBuilder(objDataAdapterB2)
objDataAdapterB2.InsertCommand = objCommandBuilder.GetInsertCommand()

objDataAdapterB2.Update(objDataSetB2, "Pict")


->> Bei Ausgabe des objDataSetB2 in ein Grid wird alles korrekt angezeigt inkl. Spaltennamen. ->> Wie kann ich denn den Insert Command selbst erstellen und der Updateanweisung zuweisen?

Gr�sse
Pat


----- Original Message ----- From: "Helge Lenuweit" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, July 16, 2004 5:00 PM
Subject: Re: [Asp.net] selbsterstelltes dataset als tabelle in datenbank
speichern



Hi Pat,

nur kurz, ich habe die Diskussion von heute nachgelesen. K�nnte es
vielleicht sein, da� t-path als Spaltenbezeichnung Probleme macht?
Versuch doch mal, im Statement eckige Klammern um die Spaltennamen zu
legen (d.h. [t-path]). Dann k�nntest Du noch den CommandBuilder durch
die manuelle Bereitstellung eines InsertCommand ersetzen. Falls es dann
immer noch nicht tut, schaue ich mir den Code nochmal an. Jetzt zieht
mich aber das sch�ne Wetter nach drau�en...

Viele Gr��e, Helge

[EMAIL PROTECTED] wrote:





Hallo zusammen,

gibt es einen Weg ein selbst erstelltes DataSet welches eine




selbsterstellte




DataTabel innehat per SQL oder anderst in DB zu schreiben.
Vielleicht irgendwie per DefaultView oder �hnlichem?

Gr�sse
Pat

_______________________________________________
Asp.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net







_______________________________________________
Asp.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

Hallo Patrik,

ich bin mir sicher das "t-path" und "h-path" vorkommen, weil ich mir das
dataset per dataview ausgeben lasse. ausserdem weiss ich doch was in meiner
db tabelle steht!
das korrekte sql statement habe ich probiert, folgender fehler:
F�r mindestens einen erforderlichen Parameter wurde kein Wert angegeben.
in dieser zeile:

objDataAdapterB1.Fill(objDataSetB1)da ich ja keine kreuztabellen abfrage in
diesem sinne mache wundert es mich schon dass er von 2 verschiedenen
datasetsderen spalten eigenh�ndig umbenennt. klar heissen diese immer


gleich


aber das eine DS hat je mit dem anderen nichst zu tun, soweit!

Warum .net hier ein Double Feld vermutet verstehe ich auch nicht, ok es ist
der PrimaryKey auf diesem Feld, diesen habe ich jetzt aber mal gel�scht und
kam zum gleichen Ergebniss. Also mich verwirrt das doch sehr. Kann ich bei
F�llen des DS den Spaltentyp mitgeben?

Gruss
Pat

Hallo





Dim objDataRow, dtRow as DataRow
For Each dtRow in objDataSetB1.Tables("Pics").Rows
objDataRow = objDataSetB2.Tables("Pictures").NewRow()
objDataRow("property") = dtRow("property")
objDataRow("serial") = dtRow("serial")
objDataRow("Expr1002") = dtRow("h-path").ToString
objDataRow("Expr1003") = dtRow("t-path").ToString
objDataSetB2.Tables("Pictures").Rows.Add(objDataRow)
Next




Woher bist Du sicher dass in dtRow "t-path" vorkommt?. Es kommt von
objDataSetB1.Tables("Pics").Rows
und das ist erwiesenermasse so gef�llt: "SELECT * FROM tbl_photos". Warum
machst Du hier nicht ein konkreteres SQL ohne *? Da h�ttest Du schon mal
etwas eingegrenzt. Die "Expr1002" etc. werden gemacht, wenn mehrere Spalten
dieselbe Bezeichnung haben. Beispiel: Ein select �ber zwei Tabellen wo Du
von beiden Tabellen die "ID" bekommst. Aus der einen ID macht er dann z.B.
Expr1002.

Die Fehlermeldung deutet daraufhin, dass das Feld nicht ein Text-Feld,
sondern
ein Double ist! Also hinter Expr1002 liegt nicht Dein vermuteter Path,
sondern
evtl. eine ID????

Ich w�rd noch warten mit "Bug" rufen...

HTH
Patrik


..musste dann mal weiter schaun. Wenn du dahinter kommst woran es lag, poste das mal. Ich muss jetzt weg und kann mir das nicht mehr n�her betrachten.

Viele Gr��e
Lars



At 14:15 16.07.2004, you wrote:





Hallo Lars,

danke f�r die Antwort. Sorry aber das gibt eben die gleiche Fehlermeldung:

System.FormatException: Die Eingabezeichenfolge hat das falsche Format. at
System.Number.ParseDouble(String s, NumberStyles style, NumberFormatInfo
info) at System.Double.Parse(String s, NumberStyles style, IFormatProvider
provider) at System.Convert.ToDouble(String value, IFormatProvider




provider)




at System.String.System.IConvertible.ToDouble(IFormatProvider provider) at
System.Convert.ToDouble(Object value) at
System.Data.Common.DoubleStorage.Set(Int32 record, Object value) at
System.Data.DataColumn.set_Item(Int32 record, Object
value)<properties/H_A_101_C_LR_0.jpg> konnte nicht in der Expr1002-Spalte
gespeichert werden. Erwarteter Typ: Double.

Ich weiss nicht warum .net aus einem Textfeld ein double machen will!?

Aber der Tipp ist auf jeden Fall was wert, das spart ja ungemein
Schreibarbeit.

Gruss
Pat


----- Original Message ----- From: "Lars Berner" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, July 16, 2004 2:06 PM Subject: Re: [Asp.net] nochmals dataset und seine t�cken


Hi Pat,

gute Frage, woran das liegt..
Was mir auff�llt: du weist den Wert jedes DataItems mit Bezug auf den
Spaltennamen zu.
Du k�nntest statt

For Each dtRow in objDataSetB1.Tables("Pics").Rows
 objDataRow = objDataSetB2.Tables("Pictures").NewRow()
 objDataRow("property") = dtRow("property")
 objDataRow("serial") = dtRow("serial")
 objDataRow("Expr1002") = dtRow("h-path").ToString
 objDataRow("Expr1003") = dtRow("t-path").ToString
 objDataSetB2.Tables("Pictures").Rows.Add(objDataRow)
Next

mal versuchen, ob folgendes besser klappt:

For Each dtRow in objDataSetB1.Tables("Pics").Rows

 objDataRow.ItemArray  =       dtRow.ItemArray

Next

..w�rde auch eine Menge Code sparen und evtl. etwas zur
Performanceverbesserung beisteuern.

Versuchs mal

Viele Gr��e
Lars



_______________________________________________
Asp.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net


--- Eingehende Mail ist zertifiziert virenfrei. �berpr�ft durch AVG Antivirus System (http://www.grisoft.com/de). Version: 6.0.720 / Virendatenbank: 476 - Erstellungsdatum: 14.07.2004




www.zoologie-online.de

Lars Berner
Stormcrow-Software
Postfach: 110123
69071 Heidelberg




---------------------------------------------------------------------------


-


----



---
Ausgehende Mail ist zertifiziert virenfrei.
\berpr|ft durch AVG Antivirus System (http://www.grisoft.com/de).
Version: 6.0.720 / Virendatenbank: 476 - Erstellungsdatum: 14.07.2004

_______________________________________________
Asp.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net






_______________________________________________ Asp.net Mailingliste, Postings senden an: [EMAIL PROTECTED] An-/Abmeldung und Suchfunktion unter: http://www.glengamoi.com/mailman/listinfo/asp.net

_______________________________________________
Asp.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net




_______________________________________________ Asp.net Mailingliste, Postings senden an: [EMAIL PROTECTED] An-/Abmeldung und Suchfunktion unter: http://www.glengamoi.com/mailman/listinfo/asp.net

Antwort per Email an