public static void addColumn(string table, string column, SqlDbType type, Nullable <int> size, object columnValue) { if (SqlCeUtilities.columnExists(table, column)) { return; } string addColumnSql = "ALTER TABLE [" + table + "] ADD COLUMN [" + column + "] " + getSqlType(type, size); string updateColumnSql = "UPDATE [" + table + "] SET [" + column + "] = @" + column; SqlCeCommand addColumnCommand = new SqlCeCommand(addColumnSql); SqlCeCommand updateColumnCommand = new SqlCeCommand(updateColumnSql); if (size != null) { updateColumnCommand.Parameters.Add("@" + column, type, size.Value).Value = columnValue; } else { updateColumnCommand.Parameters.Add("@" + column, type).Value = columnValue; } SqlCeConnection conn = new SqlCeConnection(ConfigurationParameters.ConnectionString); string errMsg = "Neuspesna promena baze."; SqlCeTransaction tr = null; try { conn.Open(); tr = conn.BeginTransaction(); addColumnCommand.Connection = conn; addColumnCommand.Transaction = tr; addColumnCommand.ExecuteNonQuery(); updateColumnCommand.Connection = conn; updateColumnCommand.Transaction = tr; updateColumnCommand.ExecuteNonQuery(); tr.Commit(); } catch (SqlCeException e) { // in Open() if (tr != null) { tr.Rollback(); // TODO: this can throw Exception and InvalidOperationException } throw new InfrastructureException(errMsg, e); } catch (InvalidOperationException e) { // in ExecuteNonQuery(), ExecureScalar() if (tr != null) { tr.Rollback(); } throw new InfrastructureException(errMsg, e); } // za svaki slucaj catch (Exception) { if (tr != null) { tr.Rollback(); } throw; } finally { conn.Close(); } }