Create Database per Code

Alfred_

Erfahrenes Mitglied
Hi,
ich bin gerade dabei, die per Hand und QueryBrowser erstellten DB, bzw.Tabellen per Laufzeit zu erstellen. Sinnigerweise gibt bei der Erstellung von Tabellen per Code null Probleme,
aber bei
Code:
	'ist Datenbank vorhanden?
	Dim StringOK As String = "ResultOK"
	Dim StringNo As String = "Smiley"

	Dim sqlConn As MySqlConnection
	sqlConn = New MySqlConnection( _
	"Data Source=localhost; Initial Catalog=baseDb; User ID=root;PWD=xxxx")
	Dim nonqueryCommand As MySqlCommand = sqlConn.CreateCommand()
	Try
	 ' hier gibts den Fehler > sqlConn.Open()
	  nonqueryCommand.CommandText = "CREATE DATABASE IF NOT EXISTS baseDb" + _
	  "DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;"
	  nonqueryCommand.ExecuteNonQuery()
	  'MessageBox.Show("Datenbank 'baseDb' erfolgreich erstellt", _
	  '"Database Creation Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
	Catch sqlExc As MySqlException
	  MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
	  MessageBoxButtons.OK, MessageBoxIcon.Error)
	  Me.pBoxCon.Image = My.Resources.ResourceManager.GetObject(StringNo)
	  Application.Exit()
	  Me.Dispose()
	  Me.Close()
	End Try
	'auch hier meckert der Compiler>  sqlConn.Close()
Ist irgendwie logisch, wenn DB nicht vorhanden kann sie auch nicht geöffnet werden:confused:
Aber wie geht es korrekt? Mit dem Referenzhandbuch komme ich nicht weiter und mit den Suchoptionen komme ich nicht zu der wahrscheinlich vorhanden Seite die mir weiterhilft. Es ist zum Verzweifeln!
 
Hi

Also bei Sql Server funktionier die Anmeldung am DB server auch ohne Angabe eine Datenbank.

Wenn das bei MySQL auch geht, musst du danach prüfen, ob die DB vorhanden ist und ggf. anlegen und die Anschließend mit der DB verbinden.
 
Hi,
da es mir die Funkwellen "verweht" hat, kann ich Dir erst jetzt antworten. WLAN ist doch die letzte Möglichkeit, nebenbei bemerkt.
Zu meinem Problem:
Ich denke wir reden aneinander vorbei. Wenn ich es richtig verstehe, dann benötigt sowohl MSSql als auch MySql eine "leere" DB an der dann die Tabellen angehängt werden, wie im folgenden Beispiel.
Code:
	Try
	  sqlConn.Open()
	  nonqueryCommand.CommandText = "USE BasisDb; " & _
	  "CREATE TABLE IF NOT EXISTS `tbluser` (" & vbCrLf & _
	  "UserID INT NOT NULL AUTO_INCREMENT, " & vbCrLf & _
	  "PRIMARY KEY (`UserID`), " & vbCrLf & _
	  "Username VARCHAR(25)," & vbCrLf & _
	  "Password VARCHAR(150))" & vbCrLf & _
	  "ENGINE = MyISAM" & vbCrLf & _
	  "DEFAULT CHARSET = latin1 " & vbCrLf & _
	  "COLLATE = latin1_german1_ci;"
	  nonqueryCommand.ExecuteNonQuery()
	Catch sqlExc As MySqlException
	  MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
	  MessageBoxButtons.OK, MessageBoxIcon.Error)
	End Try
	sqlConn.Close()
Muss ich mich damit abfinden, dass ich die DB nur über die Kommandozeile bzw. QueryBrowser von MsSql und nicht zur Laufzeit generieren kann? Und wenn ja, wie?
Grüße Alfred
 
Moin Alfred Sterner,

ich denke, wenn Du statt der nicht existierenden "basedb" einfach gegen den Wert "Initial Catalog" (ohne einen DB-Namen zu nennen) connectest, oder aber gegen "mysql" (als DbName), dann sollte es klappen.

Grüße
Biber
 
Hi,
weder das eine noch das andere....
Es scheitert auch daran, dass bei den Tabellenanbindungen der DB-Name vorgegeben ist.
Ich werde dieses Problem ad acta legen und irgendwann auf die Lösung stoßen.
Ich danke Euch jedenfalls.
Grüße
 
Hi,
ich muß Abbitte leisten!
Ich habe über den TrayMonitor den Server abgeschaltet. Da kann ich alles und jedes eingeben, es wird immer eine Fehlermeldung produziert:)
Dein Tip war richtig und so geht es..
Code:
	"Data Source=localhost; Initial Catalog=; User ID=root;PWD=xxxx")
	Dim nonqueryCommand As MySqlCommand = sqlConn.CreateCommand()
	Try
	  sqlConn.Open()
	  nonqueryCommand.CommandText = "CREATE DATABASE IF NOT EXISTS basisDb" & vbCrLf & _
	  "DEFAULT CHARSET = latin1 " & vbCrLf & _
	  "COLLATE = latin1_german1_ci;"
	  nonqueryCommand.ExecuteNonQuery()
	  'MessageBox.Show("Tabelle 'basisDb' erfolgreich erstellt", _
	  '"Database Creation Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
'diverse Aufrufe
	  Me.Show()
	  Me.Size = New System.Drawing.Size(225, 228)
	  Me.Text = "SystemLotto - Zugriffskontrolle"
	  txtoldPW.Visible = False
	  lbloldPW.Visible = False
	  Me.lblMessage.Text = "Connection:"
	  Me.FormBorderStyle = FormBorderStyle.FixedDialog
	  Me.StartPosition = FormStartPosition.CenterScreen
	  Me.MaximizeBox = False
	  Me.MinimizeBox = False
	  Me.pBoxCon.Image = My.Resources.ResourceManager.GetObject(StringOK)
	Catch sqlExc As MySqlException
	  MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
	  MessageBoxButtons.OK, MessageBoxIcon.Error)
	  Me.pBoxCon.Image = My.Resources.ResourceManager.GetObject(StringNo)
	  Application.Exit()
	  Me.Dispose()
	  Me.Close()
	End Try
	sqlConn.Close()
Nochmals Danke für Deinen Tip und Entschuldige!
Grüße
 
Hi,
irgendwie fehlt mir jetzt der Faden, was kein Wunder wäre, Föhnsturm mit Migräne (gestern), Übermüdung und eine Internetverbindung bei der ich den Provider auf den Mars schießen konnte. Hiermit bedanke ich mich bei allen, die an meiner Problemlösung beteiligt waren. Oder war mein Fehler und dessen Eingeständnis etwas unüblich?
Ps.: ... auf "erledigt" drückte ich.
Herzliche Grüße
 

Neue Beiträge

Zurück