Solved

How do I update a DataSource with new columns?

Posted on 2010-09-15
7
359 Views
Last Modified: 2012-08-14
I am adding columns to a DataTable like so:

      DataColumn newColumn = new DataColumn("NEW_COLUMN", typeof(bool));
      newColumn.DefaultValue = false;
      newColumn.AllowDBNull = false;
      Table.Columns.Add(newColumn);

According to what I see in my UI, this works just fine.  The DataGridView that I have bound to my DataTable Table gets updated with a new column as expected.

Later, I update the DataSource thusly:

      adapter.Update(Table);

adapter is an SqlDataAdapter.

When I close my application then look at my DataTable again, the columns that I added are not there.  Likewise, any columns that I removed are still there.

The only changes that persist are the addition and deletion of rows, and the changing of data in any cells of columns that were neither added nor deleted.

I suspect that the adding of columns is strictly an ALTER operation, not an INSERT, DELETE, or UPDATE operation, and I'm trying to find out how I can add ALTER functionality to my adapter.

Or maybe I'm on the wrong track entirely.

Any suggestions, out there?
0
Comment
Question by:MiloDCooper
7 Comments
 
LVL 12

Expert Comment

by:Kaushal Arora
ID: 33679750
try using the command

DataTableName.AcceptChanges();

after making modifications in the DataTable.

Hope it helps.
0
 
LVL 8

Expert Comment

by:Gururaj Badam
ID: 33679784
AcceptChanges is to accept the modifications done on the Rows of the DataTable. It doesn't actually create/remove column from the DB Table.
0
 
LVL 8

Accepted Solution

by:
Gururaj Badam earned 125 total points
ID: 33679808
Using SMO may help generate table creations script to be used against the Database or you may use SQLCommand and write your own creation script

http://davidhayden.com/blog/dave/archive/2006/01/27/2775.aspx
0
NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

 
LVL 14

Expert Comment

by:existenz2
ID: 33679825
The SqlDataAdapter can not create/delete columns. It's used for sending and retrieving data. You will have to do this with custom SqlCommand queryies or like Novice_Novice says with SMO.
0
 

Author Comment

by:MiloDCooper
ID: 33680088
OK so I'm looking into the SMO stuff, as advised by Novice_Novice.

The code I've got currently is:

      SqlConnection connection = new SqlConnection(CONNECTION_STRING);
      Server server = new Server(new ServerConnection(connection));
      Database db = server.Databases["my_db"];
      Table tbl = db.Tables["my_table"];
      Column newColumn = new Column(tbl, "NEW_COLUMN", DataType.Bit);
      newColumn.Nullable = false;
      tbl.Columns.Add(newColumn);

... after which I do a complete refresh on my original DataTable (i.e. reconnect to server and fill the DataTable again), whereupon I am still seeing no change to the table.

I set a breakpoint just after tbl.Columns.Add(newColumn), and tbl.Columns does indeed show NEW_COLUMN.

I tried tbl.Alter() and tbl.Refresh(), the first throws an exception and the second is seemingly inert.

Ideas?
0
 

Author Comment

by:MiloDCooper
ID: 33680136
P.S. The exception thrown by tbl.Alter() is "Alter failed for Table 'dbo.my_table'."
0
 

Author Comment

by:MiloDCooper
ID: 33680175
Got it working with the following code:

      SqlConnection connection = new SqlConnection(CONNECTION_STRING);
      Server server = new Server(new ServerConnection(connection));
      Database db = server.Databases["my_db"];
      Table tbl = db.Tables["my_table"];
      Column newColumn = new Column(tbl, "NEW_COLUMN", DataType.Bit);
      newColumn.Nullable = false;
      newColumn.AddDefaultConstraint();
      newColumn.DefaultConstraint.Text = "''";
      tbl.Columns.Add(newColumn);
      tbl.Alter();
0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
Shadow IT is coming out of the shadows as more businesses are choosing cloud-based applications. It is now a multi-cloud world for most organizations. Simultaneously, most businesses have yet to consolidate with one cloud provider or define an offic…
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

816 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now