Mandatory to call GetUpdateCommand of SqlCommandBuilder ?

I am updating/inserting database via dataset.
According to the sample code from Microsoft documentation, it is required to call GetUpdateCommand() and GetInsertCommand() of the command builder before doing
adapter.Update(ds, dataTableName).

But my program works fine even without calling these.
Could somebody tell if I really need to call these methods ?
Without that, what kind of problem could happen?
SqlConnection conn = new SqlConnection(CONNECTION_STRING);
 
            string dataTableName = "PRICE_DATA";
 
            DataSet ds = new DataSet(dataTableName);
 
            string sql = "SELECT Ticker, As_of, Updt_dt, eqy_weighted_avg_px, px_open, px_volume, asset_id, modifiedtimestamp FROM Price WHERE Updt_dt = '" + update_Date + "'";
 
            SqlCommand selectCMD = new SqlCommand(sql, conn);
            SqlDataAdapter da = new SqlDataAdapter(selectCMD);
            SqlCommandBuilder builder = new SqlCommandBuilder(da);
 
            conn.Open();
 
            try
            {
 
                da.Fill(ds, dataTableName);
 
            }
            catch (SqlException ex)
            {
 
                throw ex;
            }
 
 
            //Setting composite PK
            DataColumn[] keys = new DataColumn[2];
            DataColumn column1 = ds.Tables[0].Columns["TICKER"];
            DataColumn column2 = ds.Tables[0].Columns["UPDT_DT"];
 
            keys[0] = column1;
            keys[1] = column2;
 
            ds.Tables[0].PrimaryKey = keys;
 
 
            
            foreach (Security sec in securities)
            {
 
                if (sec.OpenPrice != 0 && sec.Volume != 0  && sec.WeightedAverage != 0) //if value is not available, do not insert
                {
                    //Key Values
                    object[] myKeyValues = { sec.Ticker, sec.UpdateDate.ToString("yyyyMMdd") };
 
                    if (ds.Tables[dataTableName].Rows.Contains(myKeyValues))
                    {
                        //UPDATE
 
                        DataRow existingRow = ds.Tables[dataTableName].Rows.Find(myKeyValues);
 
                        existingRow["AS_OF"] = sec.AsOfDate.ToString("yyyyMMdd");
                        existingRow["PX_OPEN"] = sec.OpenPrice;
                        existingRow["PX_VOLUME"] = sec.Volume;
                        existingRow["EQY_WEIGHTED_AVG_PX"] = sec.WeightedAverage;
                        existingRow["MODIFIEDTIMESTAMP"] = DateTime.Now;
 
                    }
                    else
                    {
                        //INSERT
 
                        DataRow newRow = ds.Tables[dataTableName].NewRow();
 
                        newRow["TICKER"] = sec.Ticker;
                        newRow["AS_OF"] = sec.AsOfDate.ToString("yyyyMMdd");
                        newRow["UPDT_DT"] = DateTime.Now.Date.ToString("yyyyMMdd");
                        newRow["EQY_WEIGHTED_AVG_PX"] = sec.WeightedAverage;
                        newRow["PX_OPEN"] = sec.OpenPrice;
                        newRow["PX_VOLUME"] = sec.Volume;
                        newRow["ASSET_ID"] = sec.AssetId;
                        newRow["MODIFIEDTIMESTAMP"] = DateTime.Now;
 
                        ds.Tables[0].Rows.Add(newRow);
 
 
                    }
 
                }
 
 
            }
 
 
            builder.GetUpdateCommand(); //not necessary ?
            builder.GetInsertCommand();//not necessary ?
 
                
	    da.Update(ds, dataTableName);

Open in new window

TakamasaAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Bob LearnedCommented:
If you reach da.Update(ds, dataTableName) without calling GetUpdateCommand and GetInsertCommand, does the SqlDataAdapter have an instance of an UpdateCommand and InsertCommand?  I don't see anything in the SqlCommandBuilder or DbCommandBuilder (base class), that would construct the commands otherwise.
0
TakamasaAuthor Commented:
Hi. Thank you for the response.
No, both UpdateCommand and InsertCommand are null...
0
Bob LearnedCommented:
Then, I would suggest that there isn't any updates or inserts, or there should have been an exception.  I always use the GetUpdateCommand, GetInsertCommand, and GetDeleteCommand with command builders.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
TakamasaAuthor Commented:
Hello TheLearnedOne,
Thank you for your comment again.
Strangely the data do get inserted in my database, which made me wonder what is the use of GetInsertCommand. Anyways, I will use the GetUpdateCommand and GetInsertCommand like you suggested.
Thank you!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.