11. september 2005 - 14:54Der er
18 kommentarer og 1 løsning
Transaction ved brug af dataadapter
Hvordan bruger man transaction hvis man opdaterer en tabel via en dataadapter? skal man så åbne en connection selv for at det kan lade sig gøre, eller er der en smart måde at gøre det på. Her er en stump kode jeg gerne vil have sat transaction på:
Jeg sætter flere Rows ind hvis det var det du mente med dit spørgsmål før. kan du sige mig om dette ser nogenlunde fornuftigt ud? foreach(DataRow XMLData in DSFraXML.Tables[0].Rows) { DataRow XMLD = DSFraSQL.Tables[0].NewRow(); XMLD["Email"]=XMLData["Email"]; XMLD["Name"]=XMLData["Name"]; XMLD["Adr"]=XMLData["Adr"]; DSFraSQL.Tables[0].Rows.Add(XMLD); }
Jeg får denne fejl når jeg køre koden: Additional information: Invalid operation. The connection is closed
Er det nødvendigt at lave en conn.Open(); conn.Close(); ugen om sådan en transaction? for så ryger fidusen lidt ved at bruge den dataadaptor gør det ikke?
Det er nettop det jeg er i tvivl om for en normal trancaction hvor man åbner en commection og selv lukker den igen kan jeg godt finde ud af at bruge det. men jeg kan ikke lige se det med en dataadapter.
åbner og lukker du ikke også connection for den ??
fra docs:
OleDbConnection myConn = new OleDbConnection(myConnection); OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(); myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn); OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);
myConn.Open();
DataSet custDS = new DataSet(); myDataAdapter.Fill(custDS);
Jeg har ikke noget med at åbne og lukke connection. Jeg gør således SqlConnection connec = new SqlConnection(@"Data Source=(local);Integrated Security=SSPI;" + "Initial Catalog=DataFraPC");
SqlDataAdapter SQLAdap = new SqlDataAdapter("select * from FraXML",connec); SqlCommandBuilder SQLBuilder = new SqlCommandBuilder(SQLAdap); DataSet DSFraSQL = new DataSet(); SQLAdap.Fill(DSFraSQL);
An unhandled exception of type 'System.InvalidOperationException' occurred in system.data.dll
Additional information: Execute requires the command to have a transaction object when the connection assigned to the command is in a pending local transaction. The Transaction property of the command has not been initialized.
Jeg synes nu stadig det er lidt mærkeligt at man skal åbne og lukke for den connection, når dataadaptoren ellers selv kan gøre dette og kan opdatere i databasen... men mange tak for det, smid et svar så får du lige lidt points
klassisk problem stilling: hvis man lader et framwork selv gøre noget så bliver det gjordt på standard måden - vil man hvae det gjordt specielt så må man selv gøre noget mere
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.