| |

VB.NET - FortgeschritteneRe: insert und gleich danach ein select klappt nicht | |  | Autor: DaveS (Moderator) | Datum: 22.09.04 19:07 |
| Nein, ich denke das geht nicht. Access kann meines Wissens nur eine Anweisung annehmen pro Abfrage. Und Mit ExecuteNonQuery() wirst du keinen Rückgabewert bekommen. Überhaupt arbeite ich mit Parametern und nicht mit zusammengesetzten Strings, was wesentlicher fehleranfälliger und sehr unsicher ist, und ich bin auch kein Fan von Autoincrement.
Ich habe leider keine Access Db zur Verfügung. Dieser Code klappt ganz gut mit SQL Server:
Dim mySql As String
Dim companyname As String = "some new company 2 AG"
Dim phone As String = "+49 89 5558140"
mySql = "insert into Shippers(CompanyName, Phone) values(@CompanyName," & _
"@Phone); Select NewId = @@IDENTITY"
Dim cmd As New SqlCommand(mySql, _conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("@CompanyName", SqlDbType.Char).Value = companyname
cmd.Parameters.Add("@Phone", SqlDbType.Char).Value = phone
cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = _
ParameterDirection.ReturnValue
_conn.Open()
Dim NewId As Integer
Try
NewId = CInt(cmd.ExecuteScalar())
Catch ex As System.Exception
MsgBox(ex.Message)
Finally
_conn.Close()
End Try
Debug.WriteLine("NewId=" + NewId.ToString()) Wenn man das in zwei Abfragen trennt bekommt man
Dim mySql As String
Dim mySql1 As String
Dim companyname As String = "some new company 2 AG"
Dim phone As String = "+49 89 5558140"
mySql = "insert into Shippers(CompanyName, Phone) values(@CompanyName," & _
"@Phone)"
mySql1 = "Select NewId = @@IDENTITY"
Dim cmd As New SqlCommand(mySql, _conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("@CompanyName", SqlDbType.Char).Value = companyname
cmd.Parameters.Add("@Phone", SqlDbType.Char).Value = phone
Dim cmd1 As New SqlCommand(mySql1, _conn)
cmd1.CommandType = CommandType.Text
cmd1.Parameters.Add("@NewId", SqlDbType.Int).Direction = _
ParameterDirection.ReturnValue
_conn.Open()
Dim NewId As Integer
Try
Dim cnt As Integer = cmd.ExecuteNonQuery()
If cnt = 1 Then
NewId = CInt(cmd1.ExecuteScalar())
End If
Catch ex As System.Exception
MsgBox(ex.Message)
Finally
_conn.Close()
End Try
Debug.WriteLine("NewId=" + NewId.ToString()) was auch erwartungsgemäss klappt.
Das in OleDb umzuwandeln dürfte nicht allzu schwer sein. Und wenn du lieber Strings zusammenbastelst sollte das auch gehen, ohne die Parameter. Du musst auch einfach "Select @@IDENTITY" schreiben. Was wirklich relevant ist ist nur der Teil von _conn.Open() bis End Try. |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|