06. april 2004 - 14:16Der er
18 kommentarer og 2 løsninger
Query bliver ikke gennemført
Jeg har et lille(Hamrende STORT) problem med en MS SQL server 2000.
Jeg har lavet en applikation i ASP.NET der sender er query afsted til SQL serveren som følgende DELETE FROM [Table] WHERE id = XX
Meeennn.... Den sletter IKKE alle rækker fra tabellen med det pågældende ID.
Hvordan kan det lade sig gøre?
I første havde jeg lavet SQL queryen i ASP.NET code behind filen, men nu har jeg lagt Queryen på SQL serveren som en Stored Procedure, men det løste ikke problemet. Det virker som om at den ikke når at udføre queryen før den fortsætter med næste query i ASP.NET koden.
Alle forslag er mere end velkomne da det er ved at være et bemærkelsesværdigt stort problem.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Det lyder som du har ændret på nogle indstilninger i det connection objekt du benytter - hvad har du angivet som cursor type, transaction isolation level etc?
Jeg ved slet ikke noget om det du nævner, så jeg har svært ved at svare på det. Hvis du evt. forklarer hvordan jeg undersøger det kan jeg måske gøre det og vende tilbage. Det skal lige siges at jeg ikke har fuld adgang til den server hvorpå SQL serveren ligger... Jeg kun et brugernavn og password til den enkelte database jeg bruger og ingen terminal service adgang til Serveren.
Når det virker i Query analyser så lyder det som et problem i ADO .NET evt. pga CommandTimeout.
Normalt burde hele sletningen blive gennemført eller slettet, men du kan evt prøve at pakke din delete statement ind i en transaction for at se om det er her problemet ligger:
BEGIN TRANSACTION DELETE FROM [Table] WHERE id = XX COMMIT TRANSACTION
Alternativt kan du hæve dit CommandTimeout til mere end de default 30 sek.
Gøres fx. på følgende måde i VB .NET:
dim objConn as new SqlConnection(<connection string>) dim objComm as new SqlCommand("DELETE FROM [Table] WHERE id = XX") '(her skal du udskifte XX med en parameter se .Net Framewok dokumentationewn ' for det ..)
objComm.CommandTimeout = 60 (sat til 60 sek. istedet for de default 30)
objConn.open objComm.executeNonQuery
(lig evt. lidt error handling ind i form af try - catch for at fange evt. fejlmeddelelser ..)
Jeg prøver lige at se på det senere, men først vil jeg lige kommentere lidt... Den med CommandTimeOut har jeg prøvet (i en anden sammenhæng). Da der ikke kastes en Connection Timeout exception tror jeg ikke det nytter, men at pakke SP ind i en transaction lyder som en god ide. Så den prøver jeg.
Prøv at køre en DBCC CHECKDB eller DBCC CHECKTABLE og se om der skulle være nogle fejl ..
Hvis det ikke er tilfældet har du så evt. mulighed for at reproducere fejlen med eksempel data som du kan poste herude - så vil vi bedre kunne hjælpe med at fejlfinde ..
Sørg for at du ikke har identity coulmns id's som er ens for så kan du ikke slette. Du har sikkert rodet med identity og fået nogen som er ens. Lav om til ikke-identity og reset alle rækker så der ikke er nogen som er ens. Herefter kan du slette
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.