Creazione dinamica db

domenica 29 agosto 2010 - 11.00
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  .NET 4.0  |  SQL Server 2008 R2

lobax Profilo | Junior Member

salve a tutti,
dopo molti anni che avevo abbandonato questo lavoro, mi sono ritrovato a dover ricominciare delle collaborazioni,il problema è che mi ricordo poco cmq..
devo dare la possibilità all'utente di:creare un nuovo archivio,visualizzare e selezionare uno gia creato,aggiungere righe e campi dinamicamente, mi ricordo una semplice istruzione sql che crea il db ma non mi ricordo come passare il dato inserito dall'utente.

Dim sqlStatement As String = _

"IF EXISTS (" & _
"SELECT * "&_ "FROM master..sysdatabases "&_
"WHERE Name = 'MyDatabase')"&vbCrLf&_
"DROP DATABASE MyDatabase "&vbCrLf&_
"CREATE DATABASE MyDatabase "
' Qui sopra senza prendere i dati dall'utente e funziona.

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

Dim sqlStatement As String = _

"IF EXISTS (" & _
"SELECT * " & _
"FROM master..sysdatabases " & _
"WHERE Name ) = " & txt_nameDB.Text & _
"DROP DATABASE = " & txt_nameDB.Text & _
"CREATE DATABASE = " & txt_nameDB.Text
Qui sotto invece cerco di prendere i dati dalla casella di testo chiamo una SqlException che mi restituisce:
Specificata espressione di tipo non booleano in un contesto in cui è prevista una condizione, in prossimità di ')'.
ho spostato e rispostato gli apici l'ide mi da sempre dello stupido..ma io non mi offendo :-) mi date una mano? grazie ciao

amdbook Profilo | Junior Member

Ciao, la sintassi corretta, in base a quanto da te scritto, è la seguente

IF EXISTS (SELECT * FROM master..sysdatabases WHERE [name] ='NOMEDB') DROP DATABASE [NOMEDB] CREATE DATABASE [NOMEDB]

Dovresti spostare la chiusura della parentesi tonda dopo il nome del database (messo fra apici). Attenzione ai permessi.

>>Pietro Libro
Blog: http://blogs.ugidotnet.org/PietroLibroBlog/

lobax Profilo | Junior Member

perdonami, il problema mi si sposta di poco come ho scritto la stringa funziona, ma non combino a concatenarla, mettendo in questo modo :
"IF EXISTS (" & _
"SELECT * " & _
"FROM master..sysdatabases WHERE Name = " + txt_nameDB.Text + ")DROP DATABASE = " + txt_nameDB.Text + " CREATE DATABASE = " + txt_nameDB.Text

mi restituisce(posto l'eccezione intera x completezza)

System.Data.SqlClient.SqlException è stata individuata
Class=15
ErrorCode=-2146232060
LineNumber=1
Message=Sintassi non corretta in prossimità di '='.
Number=102
Procedure=""
Server=.\SQLEXPRESS
Source=.Net SqlClient Data Provider
State=1
StackTrace:
in System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
in System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
in System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
in System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
in System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
in System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
in System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
in CreateDb.Form1.CreateDatabase() in C:\Documents and Settings\L&S\Documenti\Visual Studio 2010\Code Snippets\Visual Basic\My Code Snippets\Snip_CreateDB\Form1.vb:riga 86
InnerException:

amdbook Profilo | Junior Member

Durante la concatenazione, in questo punto
WHERE Name = " + txt_nameDB.Text + ")
dovresti sostituire con
WHERE Name = ' " + txt_nameDB.Text + " ')
(sono stati aggiunti degli apici). Possibilmente per il CREATE ed il DROP dovresti racchiudere il nome del DB tra parentesi quadre. Nel caso ci fossero ancora problemi, tramite il debugger di Visual Studio puoi verificare la tuta stringa concatenata con quella postata in precedenza ed eseguire un confronto.

>>Pietro Libro
Blog: http://blogs.ugidotnet.org/PietroLibroBlog/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5