Connessione a database SQL Server con C#

martedì 15 agosto 2006 - 21.11

paolo973 Profilo | Senior Member

Salve a tutti,

ho creato un database test.mdf con VS 2005 contenente una tabella sola e 2 record.

ho copiato il database test.mdf, che avevo creato per un'altra applicazione, nella direcory

C:\Documents and Settings\Administrator\Documenti\Visual Studio 2005\Projects\database\database

desidero accedere a tale tabella e stampare a video i due record.

Per far ciò ho usato una semplice ConsoleApplication in C# chiamata database il cui codice è il seguente:

__________________________________________________________________

using System;
using System.Data;
using System.Data.SqlClient;


namespace database
{
class Program
{
static void Main(string[] args)
{
Program t = new Program();
t.Run();
}
public void Run()
{
Console.WriteLine("Connessione");

String source = "Data Source=(local);Initial Catalog=test;Integrated Security=SSPI";

SqlConnection conn = new SqlConnection(source);
try
{
conn.Open();
Console.WriteLine("SONO QUI");
SqlCommand cmd = new SqlCommand("SELECT * FROM tabella", conn);
SqlDataReader myReader = cmd.ExecuteReader();
while (myReader.Read())
{
Console.WriteLine(myReader[0]);
}
myReader.Close();
}
catch (Exception e)
{
Console.WriteLine("Exception Occured -->> {0}", e);
}

finally
{
conn.Close();
}
}
}
}

__________________________________________________________________

l'applicazione parte ma non ottengo i due records ma solo la scritta :

Connessione
|

ed il cursore che lampeggia sotto.



la scritta "SONO QUI" non viene stampata presumo che l'errore sia nella connessione conn.

In esplora soluzioni non ho importato nessun database ed
in espora server non ho nessuna connessione.

dove sto sbagliando ?

Grazie sempre

Cteniza Profilo | Guru

Prova una stringa di connessione del genere:
Server=localhost;DataBase=mydatabase;Integrated Security=SSPI"

lbenaglia Profilo | Guru

>ho copiato il database test.mdf, che avevo creato per un'altra
>applicazione, nella direcory
>
>C:\Documents and Settings\Administrator\Documenti\Visual Studio
>2005\Projects\database\database
>
>desidero accedere a tale tabella e stampare a video i due record.

SQL Server è un database server non un database file based come Access!!
Questo significa che esiste un servizio che risponde alle richieste dei client, quindi l'engine risiede in un processo separato (potenzialmente su un computer remoto).
Un database SQL Server è *SEMPRE* costituito da almeno 2 files (ma possono essere molti di più):
- Un Master Data File (estensione .mdf) che contiene lo schema delle tabelle di sistema e se non specificato diversamente anche gli oggetti utente ed i dati;
- Un Transaction Log (estensione .ldf) che contiene l'elenco di tutte le transazioni eseguite sul database; quando fai una qualsiasi modifica ad una riga di una tabella, prima di tutto tale modifica verrà scritta nel transaction log e solo successivamente SQL Server provvederà a propagarla ai data files.

Tutto questo per dire che SQL Server funziona in modo COMPLETAMENTE differente da Access e NON è sufficiente copiare il file .mdf per spostare un database, ma occorre seguire potenzialmente 2 strade:

1) Sganciare il database da una istanza, copiare tutti i suoi files (.mdf, .ldf ed eventualmente i files .ndf) sul server di destinazione e ricollegarlo all'istanza. Queste operazioni vengono effettuare tramite la stored procedure sp_detach_db ed il comando CREATE DATABASE FOR ATTACH:

"sp_detach_db"
http://msdn2.microsoft.com/it-it/library/ms188031.aspx

"CREATE DATABASE (Transact-SQL)"
http://msdn2.microsoft.com/it-it/library/ms176061.aspx

"Scollegamento e collegamento di un database"
http://msdn2.microsoft.com/it-it/library/ms190794.aspx


2) Eseguendo un BACKUP ed il relativo RESTORE specificando tramite la clausola WITH MOVE dove posizionare sul file system del server di destinazione i files che costituiscono il database:

"BACKUP (Transact-SQL)"
http://msdn2.microsoft.com/it-it/library/ms186865.aspx

"RESTORE (Transact-SQL)"
http://msdn2.microsoft.com/it-it/library/ms186858.aspx

Leggi attentamente i paragrafi dei Books Online che ti ho segnalato, scegli uno dei due metodi in modo da trasferire correttamente il database.

>Grazie sempre
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

paolo973 Profilo | Senior Member

La stringa proposta non funziona.

Inoltre ho provato a non spostare nessun database ma a crearlo nuovamente

nessun risultato

eppure stabilire un collegamento ad un database sql server 2005

non credevo fosse così complicato.

qual'è la stringa da usare ?

Grazie sempre per la Vostra professionalità

lbenaglia Profilo | Guru

>La stringa proposta non funziona.
Non funziona perché il database probabilmente non è collegato all'istanza.
Lascia perdere per un momento il tuo client C# e prova ad eseguire una query da SQL Server Management Studio in modo da capire in modo più preciso il problema.

>Inoltre ho provato a non spostare nessun database ma a crearlo
>nuovamente
Nel primo post hai scritto:

"ho creato un database test.mdf con VS 2005 contenente una tabella sola e 2 record.
ho copiato il database test.mdf, che avevo creato per un'altra applicazione, nella direcory
C:\Documents and Settings\Administrator\Documenti\Visual Studio 2005\Projects\database\database"

Ora invece che hai fatto?
Hai creato un nuovo database? In che modo?
Stai tentando di connetterti dal medesimo PC oppure da remoto?

>eppure stabilire un collegamento ad un database sql server 2005
>
>non credevo fosse così complicato.
Se non si conosce la teoria che ci sta dietro, tutto diventa difficile...

>qual'è la stringa da usare ?
Su questo sito trovi tutte le stringhe di connessione:
http://www.connectionstrings.com/

Il mio suggerimento è quello di dedicare del tempo a leggere le parti salienti dei Books Online, in modo da capire cos'è e come funziona SQL Server piuttosto che provare "a casaccio" le stringhe di connessione proposte.

>Grazie sempre per la Vostra professionalità
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5