Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Problema aggiornamento database sql con applicazione multiutente
sabato 17 luglio 2010 - 10.00
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
Windows XP
|
Visual Studio 2003
|
SQL Server 2000
alex78
Profilo
| Newbie
4
messaggi | Data Invio:
sab 17 lug 2010 - 10:00
Salve a tutti, premetto che non avendo mai fatto applicazioni multiutente sicuramente ho dimenticato qualcosa di fondamentale comunque io vorrei fare un applicazione multiutente utilizzando sql server ma mi si presenta un problema di aggiornamento dei dati. Mi spiego meglio ho messo l'applicazione sul "server" ovvero la macchina con sql poi su un client con la stringa di connessione corretta per prendere i dati dal server, ora se io vado a modificare dal lato server un valore non avviene l'aggiornamento dei dati sul client e viceversa fino a quando non chiudo l'applicazione e la riavvio. Ho cercato un pò su web forse è un problema di concorrenza ma non sono riuscito a capire bene cosa mi manchi per gestire questa situazione. Mi potete chiarire un pò le idee Grazie a tutti.
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 19 lug 2010 - 10:05
>Salve a tutti,
Ciao
>ora se io vado a modificare lato server un valore non avviene l'aggiornamento dei dati
>sul client e viceversa fino a quando non chiudo l'applicazione
>e la riavvio. Ho cercato un pò su web forse è un problema di
>concorrenza ma non sono riuscito a capire bene cosa mi manchi
>per gestire questa situazione. Mi potete chiarire un pò le idee
Puoi essere un po' più dettagliato? Che cosa usi? in che linguaggio? Che codice scrivi? Che tipo di applicazione è?
Potrebbe essere semplicemente un problema di sintassi del codice.
>Grazie a tutti.
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
alex78
Profilo
| Newbie
4
messaggi | Data Invio:
lun 19 lug 2010 - 10:32
Si certamente hai ragione, utilizzo vb.net 2003 con database sql2000 e win xp per quanto riguarda l'applicazione è una sorta di agenda di appuntamenti per l'officina questa ovviamente dovrebbe girare su più terminali e qui arriva il mio problema non avendo mai fatto applicazioni multiterminali. Io ho fatto questo utilizzo App.config da dove recupero la stringa di connessione in questo modo:
dim con as string
con = Configuration.ConfigurationSettings.AppSettings("Connectionstring")
Me.SqlConnection1.ConnectionString = con
invece la stringa di connessione è la seguente :
questa è sul pc server
<add key="ConnectionString" value="workstation id=server;packet size=4096;integrated security=SSPI;data source=server;persist security info=False;initial catalog=agendaofficina" />
<add key="Timeout" value="50" />
questa è quella del client
<add key="ConnectionString" value="Data Source=192.168.0.2,1433;Initial Catalog=agendaofficina;User ID=sa;Password=xxx"/>
<add key="Timeout" value="0" />
Praticamente succede questo a video ho un datagrid dove visualizzo filtrandoli gli appuntamenti se io vado ad aprire le applicazioni su due pc e modifico da uno un rigo la modifica non viene visualizzata sull'altro pc ed in più se provo a modificare lo stesso rigo mi da il seguente errore :
Violazione di concorrenza: updatecommand ha modificato 0 record
spero che ciò possa aiutarti a capire meglio il problema grazie.
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 23 lug 2010 - 10:03
><add key="ConnectionString" value="Data Source=192.168.0.2,1433;Initial Catalog=agendaofficina;User ID=sa;Password=xxx"/>
sulla connessione non ci sono problemi, non c'è nulla da fare lato sviluppo per realizzare la "multiutenza" è l'rdbms che accetta più utenze. Quindi il problema non è dipendente da come scrivi il software. Magari evita di usare sa che è sysadmin e può fare tutto, pensa piuttosto ad un set di utenze dedicate all'applicazione.
>Praticamente succede questo a video ho un datagrid dove visualizzo filtrandoli gli appuntamenti se io vado ad aprire le applicazioni
>su due pc e modifico da uno un rigo la modifica non viene visualizzata sull'altro pc ed in più se provo a modificare lo stesso rigo mi da il seguente errore :
>Violazione di concorrenza: updatecommand ha modificato 0 record.
Questo perchè probabilmente utilizzi strumenti disconnessi per gestire i dati. Puoi postare un po' di codice?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
alex78
Profilo
| Newbie
4
messaggi | Data Invio:
dom 22 ago 2010 - 17:15
Scusa il ritardo della risposta. Allora il codice è questo :
Dim myConnection As New SqlConnection(Configuration.ConfigurationSettings.AppSettings("Connectionstring"))
myConnection.Open()
Dim myCommand As SqlCommand = myConnection.CreateCommand()
Dim myTrans As SqlTransaction
myTrans = myConnection.BeginTransaction()
myCommand.Connection = myConnection
myCommand.Transaction = myTrans
Try
Dim i As Integer
Dim con As String
If Me.incarico.Checked = True Then
If Me.idselect.Text = "" Then
Else
If Me.statolav.Text = "in carico" Then
Else
Dim r1 As DialogResult = MessageBox.Show(" Stato di lavorazione modificato, Confermi la modifica ?", " Modifica stato lavorazione ", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
If r1 = DialogResult.Yes Then
If Me.incarico.Checked = True Then
Me.statolavtemp.Text = "in carico"
For i = 0 To Me.DSappuntamenti1.appuntamenti.Rows.Count - 1
If Me.DSappuntamenti1.appuntamenti.Rows(i)("id") = Me.idselect.Text Then
Me.DSappuntamenti1.appuntamenti.Rows(i)("statolavor") = Me.statolavtemp.Text
BindingContext(DSappuntamenti1, "appuntamenti").EndCurrentEdit()
Me.statolavtemp.Text = ""
myTrans.Commit()
SaveData(Me.SqlDataAdapter1, DSappuntamenti1)
Exit For
End If
Next
End If
Catch
Try
myTrans.Rollback()
Catch ex As SqlException
If Not myTrans.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
Finally
myConnection.Close()
End Try
Io ho fatto questo per rimediare non so se è corretto probabilmente no ovvero ho preso un timer ed ho messo l'aggiornamento del db come segue
Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
Try
LoadData(Me.SqlDataAdapter1, DSappuntamenti1)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
avete consigli da darmi per evitare il timer e farlo in modo corretto ? e poi è giusto il mio modo di gestire tale operazione ?
Grazie
Torna su
Stanze Forum
Elenco Threads
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 !