Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / June 2006

Tip: Looking for answers? Try searching our database.

Newbie DataTable question

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Ben - 27 Jun 2006 16:53 GMT
Stupid question for the day,

Just playing around with rewriting my website in .Net,  I want to add a
record to my database table,  in the old ADO, it was simple you could
create a connection and recordset and then rs.AddNew etc... in .Net it
seems they recommend that you  populate a DataTable  then use the
NewRow method

Isnt this bringing back a entire copy of the table (in this case 40,000
users), if so isn't this very inefficient? I know you can run a
insert via a ExecuteNonQuery which is the way I have done it in the
past (usually passing parameters to stored procs)

But I would have thought you should be able to add a row (Datarow) in
this case to a table without returning the entire table when you
connect to it.

Probably being very stupid

heres my code

       try
       {
           // Initializations
           string database = "MyDB.mdb";
           string connectionString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Z:\Web\Database\" +
database;

           //connection
           OleDbConnection cnn = new OleDbConnection();
           cnn.ConnectionString = connectionString;
           cnn.Open();

           OleDbCommand com = cnn.CreateCommand();
           com.CommandText = "Select * from tblUser";

           OleDbDataAdapter da = new OleDbDataAdapter();
           da.SelectCommand = com;

           //DataSet ds = new DataSet();
           //da.Fill(ds, "Users");

           DataTable dt = new DataTable();
           da.Fill(dt);

           //DataRow dr = dt.Rows[0];
           DataRow dr = dt.NewRow();

           dr["FirstName"] = FirstName.ToString();
           dr["Surname"] = Surname.ToString();
           dr["Email"] = Email.ToString();

           dt.Rows.Add(dr);
           da.Update(dt);

           //close up

           cnn.Close();
       }
       catch (OleDbException  ee)
       {
           Console.WriteLine(ee.ToString());
       }
bruce barker (sqlwork.com) - 27 Jun 2006 17:18 GMT
the notion of in-memory datasets, is you only keep a copy of what you need.
the premise is that normally you only need a subset of the data. a dataset
keeps track of the status of a row (new, modified,deleted,unchanged). then
the adapter can look at the row status to determine whether to insert,
delete, update, or do nothing.

in your case you are loading the dataset solely to get the structure.  you
could use the folowwing statement.

com.CommandText = "Select * from tblUser where 1 = 0";

which would only return column info and no data. a better approach is to use
typed datasets. here you use a wizard to build a dataset class that initials
the table and column info. this removes the requirement to do a dummy
database select. also you get a dot notion for accessing column data.

-- bruce (sqlwork.com)

> Stupid question for the day,
>
[quoted text clipped - 60 lines]
>            Console.WriteLine(ee.ToString());
>        }
Ben - 27 Jun 2006 17:43 GMT
thanks Bruce,

yeah as you where writing i had tried that, bit quicker, but then it
wont allow me to insert data

"Update requires a valid InsertCommand when passed DataRow collection
with new rows."

so i guess i need to change

da.SelectCommand   = com;

to

da.InsertCommand = com;

that doesnt work :(.  any more words of wisdom?  the main reason i am
doing this is to avoid having to handle what data is being put into
each field when the users submit the data. creating a Insert string
seem to me the wrong way to do this.

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.