2013-09-15 11 views
0

Я хотел бы написать код, чтобы добавить DataColumn в DataTable, но когда я сохраняю DataTable, он не включает новый DataColumn.Добавленные DataColumns не сохраняются в базе данных Access

Он сохраняет все новые DataRows, которые я добавляю, но не DataColumns.

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

public partial class Form1 : Form 
{ 
    MyDatabase DB; 
    DataTable Products; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     DB = new MyDatabase(); 
     DB.Open(@"C:\Users\Grant\Documents\Database.accdb"); 
     Products = DB.GetTable("Products"); 
     AddColumn(); 
     AddRow(); 
     DB.Save(Products); 
    } 

    private void AddColumn() 
    { 
     DataColumn Column = new DataColumn(); 
     Column.DataType = Type.GetType("System.String"); 
     Column.ColumnName = "TestColumn"; 
     Products.Columns.Add(Column); 
    } 

    private void AddRow() 
    { 
     DataRow Row; 
     Row = Products.Rows.Add(1, "B", "C"); 
    } 
} 

class MyDatabase 
{ 
    // The following program has to be installed on the computer 
    // http://www.microsoft.com/downloads/en/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en 

    private String provider = "Microsoft.ACE.OLEDB.12.0"; 
    private String source; 
    private OleDbConnection connection; 
    private String connectionString; 
    private DataSet dataSet = new DataSet(); 
    private OleDbDataAdapter adapter; 
    private OleDbCommandBuilder commandBuilder; 

    public String Provider 
    { 
     get { return provider; } 
     set { provider = value; } 
    } 
    public String Source 
    { 
     get { return Source; } 
     set { source = value; } 
    } 
    public void Open(String Filename) 
    { 
     connectionString = @"Provider=" + provider + @";Data Source=" + Filename; 
     connection = new OleDbConnection(connectionString); 
     connection.Open(); 
     adapter = new OleDbDataAdapter(); 
    } 
    public void BuildStrings() 
    { 
     commandBuilder = new OleDbCommandBuilder(adapter); 
     adapter.UpdateCommand = commandBuilder.GetUpdateCommand(); 
     adapter.InsertCommand = commandBuilder.GetInsertCommand(); 
     adapter.DeleteCommand = commandBuilder.GetDeleteCommand(); 
    } 
    public DataTable GetTable(String TableName) 
    { 
     adapter.SelectCommand = new OleDbCommand("SELECT * From " + TableName, connection); 
     BuildStrings(); 
     adapter.Fill(dataSet, TableName); 
     return dataSet.Tables[TableName]; 
    } 
    public void Save(DataTable Table) 
    { 
     adapter.Update(Table); 
     adapter.Update(dataSet, "Products"); 
    } 
} 
+0

Забыли сказать, что при отладке это показывает, что столбец добавляется в таблицу, но просто не сохраняется. – user1843670

ответ

0

Получил ответ с другого форума.

Вы не можете добавить новый столбец/поле в таблицу базы данных с помощью набора данных или данных, возможно, вам придется использовать «ALTER TABLE» с помощью команд ADO.NET. Проверьте ниже ссылки

Как я могу вставить Новый столбец в таблицу базы данных Использование SqlDataAdapter и DataTable? [^]

добавление столбца в таблицу SQL в VB с помощью ADO.NET команд [^]