Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
XML To Dataset
Message
De
20/03/2008 10:55:18
 
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Titre:
Divers
Thread ID:
01303148
Message ID:
01303895
Vues:
21
>Now that I have recieved the data as XML in the server side class, can you recommend a technique for
>getting the data back into the DB?


OK, well, you've already figured out how to get the XML back into the DataSet using the StreamReader with the .ReadXml() method (we include a method that does that in all of our DataSet classes).

And somewhere in this thread, someone (I think Mike), suggested a way for updating your database and it's basically the way that we do things. Here's something I have posted here many times, but it's easier to post it again rather than search for a message <g>:

There are a few more options when updating the database.

First, you can use the Update method of the DataAdapter. In order for this to work, your DataSet must have a PrimaryKey defined.

You can do it using the CommandBuilder, which will generate update commands for you (note: if you use a Stored Proc, the CommandBuilder only generates the proper insert/update/delete commands for the first table retreived from the Stored Proc):
public void UpdateMyData(DataSet ds)
{
	// The same applies for the Update. It's not necessary to Open/Close the connection.
	SqlDataAdapter da = new SqlDataAdapter("select * from bob", this.oConnection);
	SqlCommandBuilder sb = new SqlCommandBuilder(da);

	da.Update(ds);
}
Or you can create the various update commands yourself instead of using the CommandBuilder:
public void UpdateMyData(DataSet ds)
{

	SqlCommand sc = new SqlCommand();
	sc.Connection = this.oConnection;
	da = new SqlDataAdapter(sc);

	da.InsertCommand = new SqlCommand("Insert into bob (xyz, abc) VALUES ( @xyz, @abc )", sc.Connection);
	da.InsertCommand.Parameters.Add("@xyz", SqlDbType.Int, 8, "xyz");
	da.InsertCommand.Parameters.Add("@abc", SqlDbType.VarChar, 50, "abc");

	// do the same for da.DeleteCommand & da.UpdateCommand

	da.Update(ds);
}
Or, you can take total control, not use the da.Update() and do it all yourself (this is basically the same code that gets done behind the scenes by the da.Update() method:
public void UpdateMyData(DataSet ds)
{
	SqlCommand sc = new SqlCommand();
	sc.Connection = this.oConnection;
	sc.Connection.Open();
	foreach (DataRow Row in ds.Tables[0].Rows)
	{
		switch (Row.RowState)
		{
			case DataRowState.Added :
				sc.CommandText = "Insert into bob (xyz, abc) VALUES ( @xyz, @abc )";
				sc.Parameters.Clear();
				sc.Parameters.Add("@xyz", Row["xyz"]);
				sc.Parameters.Add("@abc", Row["abc"]);
				sc.ExecuteNonQuery();
				break;
				
			// Do the same for DataRowState Deleted and Modified
			case DataRowState.Deleted :
				break;
			case DataRowState.Modified :
				break;
		}
	}
	sc.Connection.Close();
}
~~Bonnie
Bonnie Berent DeWitt
NET/C# MVP since 2003

http://geek-goddess-bonnie.blogspot.com
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform