Here data loaded from xml.
As I implemented transaction, Data will be saved to Database only when all table inserted successfuly. If insertion failes inbetween data will be rollbacked.
C# Code:
static void Main(string[] args) { var connectionString = "SQLSERVER_DATABSE_CONNECTIONSTRING_HERE"; DataSet ds = new DataSet(); ds.ReadXml("data.xml"); using (var con = new SqlConnection(connectionString)) using (var cmd = new SqlCommand()) { con.Open(); SqlTransaction transaction; transaction = con.BeginTransaction("SampleTransaction"); cmd.Transaction = transaction; string tableName = string.Empty; try { foreach (DataTable table in ds.Tables) { string columns = string.Join(",", table.Columns.Cast().Select(c => c.ColumnName)); string values = string.Join(",", table.Columns.Cast ().Select(c => string.Format("@{0}", c.ColumnName))); tableName = table.TableName; string sqlCommandInsert = string.Format("INSERT INTO dbo.{0}({1}) VALUES ({2});", tableName, columns, values); cmd.CommandText = sqlCommandInsert; cmd.Connection = con; foreach (DataRow row in table.Rows) { cmd.Parameters.Clear(); foreach (DataColumn col in table.Columns) cmd.Parameters.AddWithValue("@" + col.ColumnName, row[col]); var inserted = cmd.ExecuteNonQuery(); } } } catch (Exception ex) { Console.WriteLine(tableName); Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); try { transaction.Rollback(); } catch (Exception ex2) { Console.WriteLine(ex2.Message); Console.WriteLine(ex2.StackTrace); } } } Console.ReadLine(); }
No comments:
Post a Comment