2009-07-03 14 views
1

Hallo zusammen habe ich diese Abfrage-String ich laufen muss, so kann ich eine bestimmte Zeile in einer SQL Server-Tabelle aktualisieren:Warum tut meine SQL-Abfrage nichts?

servidorSql.ConnectionString = conexao 
    Dim insert As String = "UPDATE [Equipamentos] SET [ID_Cliente][email protected]_Cliente,  [Identificacao] = @Identificacao, [Fabricante] = @Fabricante, [Modelo] = @Modelo, [Versao_Software] = @Versao_Software, [Localizacao] = @Localizacao WHERE [ID_Equipamento][email protected]_Equipamento" 

    Dim sqlquery As SqlCommand = New SqlCommand(insert, servidorSql) 

    Try 
     servidorSql.Open() 
     sqlquery.Parameters.AddWithValue("@ID_Cliente", ID_Cliente) 
     sqlquery.Parameters.AddWithValue("@ID_Equipamento", ID_Equipamento) 
     sqlquery.Parameters.AddWithValue("@Identificacao", Identificacao) 
     sqlquery.Parameters.AddWithValue("@Fabricante", Fabricante) 
     sqlquery.Parameters.AddWithValue("@modelo", modelo) 
     sqlquery.Parameters.AddWithValue("@versao_Software", versao_Software) 
     sqlquery.Parameters.AddWithValue("@localizacao", localizacao) 
     sqlquery.ExecuteNonQuery() 
     servidorSql.Close() 

    Catch e As SqlClient.SqlException 
     MsgBox(e.ToString()) 
    End Try 

Das Problem ist, dass es irgendetwas tun doens't, es aktualisiert nicht die Tisch und es gibt mir keine Ausnahme. "ID_Equipamento" ist der Schlüssel und die Identität der Tabelle und ich habe versucht, die Abfrage mit dem zu aktualisierenden Feld auszuführen, und es ist dasselbe. Irgendwelche Vorschläge?

+0

Wild raten, conexao ist auf eine andere DB gerichtet –

+0

Nein ... Es ist korrekt. – v3ga

Antwort

0

Das Problem ist es in der Abfrage selbst! Konnte nicht sehr gut warum, aber macht nichts. Das Problem ist gelöst .... Danke trotzdem für Ihre Hilfe. Aprecciated

1

Versuchen Sie ein Commit hinzuzufügen.

Auch wenn die Datenbank autokommuniziert, ist es fast immer besser, sich explizit darum zu kümmern.

+0

Wie mache ich das? – v3ga

+0

COMMIT TRANSACTION (Siehe http://msdn.microsoft.com/en-us/library/ms190295.aspx) – Justin

1

Versuchen Sie es mit SQL Server Profiler - das gibt Ihnen viel mehr einen Hinweis darauf, was passiert. Wahrscheinlich übergeben Sie eine ID, die nicht existiert.

+0

Die ID existiert, das ist das Follow-up eines Datagrid – v3ga

0

Die sqlquery.ExecuteNonQuery() Anweisung gibt die Anzahl der betroffenen Zeilen, so können Sie es auch überprüfen, so etwas wie:

int rowsAffected = sqlquery.ExecuteNonQuery(); 
Debug.WriteLine("Rows affected: " + rowsAffected); 

können Sie auch die ID_Equipamento Variablen überprüfen.

Debug.WriteLine(ID_Equipamento); 

Vielleicht ist diese Variable nicht den Wert des Primärschlüssels für die Tabelle

+0

Es hält ... – v3ga

0

Sie sind nicht alles Einfügen halten. Und ich bezweifle, dass du sogar Dinge modifizierst. Sie führen eine UPDATE Anweisung aus. Überprüfen Sie, ob Sie den Datensatz mit anderen Werten als den in Ihrer Datenbank gespeicherten Werten aktualisieren. Natürlich kann @ID_Equipamento die ID eines nicht existierenden Datensatzes sein, in diesem Fall aktualisieren Sie nichts. Das wird keinen Fehler erzeugen, sondern sagt nur, dass es 0 Datensätze geändert hat.

+0

Dude, der Rekord existiert, die ID existiert! und debuggen die Abfrage in SQL SERVER Management berichtet, dass Auswirkungen auf 1 Zeile. Aber nichts ändert sich, und ja ich aktualisiere mit anderen Werten! – v3ga

+0

Stellen Sie sicher, dass Sie dies überprüft haben. Haben Sie auch versucht, die Datenbank explizit zu committen, wie von Brian vorgeschlagen? Und sind Sie sicher, dass Sie noch nicht in einer offenen Transaktion sind? (In diesem Fall wird das Update nicht sofort übernommen.) –

1

Erfassen Sie eine SQL Profiler-Ablaufverfolgung, um zu bestätigen, dass der Parameter, den die ID, die Sie übergeben, definitiv die ID ist, von der Sie denken, dass es ist. Wenn Sie auch die Spalte RowCounts auswählen, können Sie die Anzahl der aktualisierten Zeilen sehen.