Comparing Two DataSets

W

Will Lastname

In one of the applications that I'm working on I have 2 sets of
functions that build different datasets.

Imagine 4 columns in a datagrid. Inside those 4 columns I have nested
datalists. Two of the datalists' datasources point to database A and
the other two point to database B. This effect allows the client to
perform a side-by-side comparison of the same product so that records
can be updated accordingly. It's easy enough to scroll down and look
for differences but I was asked to make it even easier for the client.
The ultimate goal is to have any changes displayed in red or bold type
so that differences can be spotted at first glance. An example would be
that if Database A has product XYZ's latest version at 3 and Database B
has product XYZ's latest version at 4, then the 4 would be displayed in
red or bold type.

I'm thinking that a cookie might be the way to go but I could be wrong.
Does anyone have any suggestions or references that I can check out to
compare datasets row-by-row? Is there an easier way to go about doing
this?
 
G

Guest

Can you join the relevant tables in SQL? Cross database joins are quite
straight forward if you have the necessary permissions. That way you could
flag your interest using computed columns. Probably more efficient than
regular coding.
 
W

Will Lastname

Jeb: I wish I could as this would make the most sense. The only problem
is that one database is MS Access and one is SQL.
 
S

S. Justin Gengo

Will,

What about putting both tables into the same dataset and creating a
relationship?

--
Sincerely,

S. Justin Gengo, MCP
Web Developer / Programmer

www.aboutfortunate.com

"Out of chaos comes order."
Nietzsche
 
W

Will Lastname

That sounds like it would be the best bet but I'm wondering how much
work would go into implementing it.

I have 4 functions that I call for the Access database and the same 4
functions for the SQL database. The only difference being minor SQL
syntax differences.

Are there any sites or references that you could suggest?
 
S

S. Justin Gengo

Will,

You'll have to run all your SQL statements either way, but then once you
have all the tables in a dataset you can create the relationship(s). Here's
a snippet of code that shows how to create a relationship.

' Create and fill the DataSet.
m_DataSet = New DataSet
m_da_Addresses.Fill(m_DataSet, "Addresses")
m_da_TestScores.Fill(m_DataSet, "TestScores")

' Define the relationship between the tables.
Dim data_relation As New _
DataRelation("Addresses_TestScores", _
m_DataSet.Tables("Addresses").Columns("ContactID"), _
_
m_DataSet.Tables("TestScores").Columns("ContactID"))
m_DataSet.Relations.Add(data_relation)

Once your relationships are created you can do some pretty neat things with
DataViews I think you should be able to query your tables and look for like
names but with different numbers. It will take some experimentation. I would
google for info on creating relationship

Take a look at the code at the bottom of this page:

http://www32.brinkster.com/srisamp/netArticles/article_15.htm

It's very similar to what you might do.

--
Sincerely,

S. Justin Gengo, MCP
Web Developer / Programmer

www.aboutfortunate.com

"Out of chaos comes order."
Nietzsche
 
W

Will Lastname

I also read another article about storing multiple database tables in
the dataset. Will I run into problems with the fact that both databases
have the exact same field names?
 
W

Will Lastname

For instance, if I have the datalist's datasource set to
'FunctionGetItemVersionByProductID(ProductID) and I have in my
itemtemplate: <%# DataBinder.Eval(Container.DataItem, "ProductName")
%>, won't there by 2 instances of Product name and in turn throw an
error?
 
S

S. Justin Gengo

Will,

Bind the datatable and not the entire dataset. Then it won't matter.

--
Sincerely,

S. Justin Gengo, MCP
Web Developer / Programmer

www.aboutfortunate.com

"Out of chaos comes order."
Nietzsche
 
W

Will Lastname

I read some related articles very thoroughly and have at least a
general understanding of how to create the datatable. I have about 8
functions that are tied to my datalists that retrieve data. Each
function has different SQL statements that retrieve specific pieces of
data. What would be the best way of "concatenating" onto my current
datatable? If I dim a new datatable in each function won't the
information keep getting rewritten? I haven't found any literature
online in regards to this matter. Everything I've come across
presupposes that there is one subroutine with 2 or more datasets.
 
S

S. Justin Gengo

You can add as many datatables to a dataset as you'd like to. You just have
to make certain that each datatable has a different name.



For example (Assuming you already have a dataset that contains one or more
datatables) you may add another like so:



Public Function AddTableToDataSet(ByVal dataSetToAddTo As DataSet, ByVal
sqlCommand As SqlCommand, ByVal dataSetTableName As String) As DataSet

Try

Dim FortunateDataAdapter As SqlDataAdapter =
GetDataAdapter(sqlCommand)

FortunateDataAdapter.Fill(dataSetToAddTo, dataSetTableName)



Return dataSetToAddTo

Catch e As Exception

Throw e

End Try

End Function



Sincerely,

--
Sincerely,

S. Justin Gengo, MCP
Web Developer / Programmer

www.aboutfortunate.com

"Out of chaos comes order."
Nietzsche
 
W

Will Lastname

So to test this I created a dataset with 2 tables. Let's just say
Table1 and Table2. In going through my FOR Next Loop I tried the
following:

For i = 0 To dsRowCount - 1
If ds.Tables("Table1").Rows(i)("ColumnName") <>
ds.Tables("Table2").Rows(i)("ColumnName") Then
response.write("not the same")
Else
resposne.write("ok")
End If
Next i

I am getting an "Object reference not set to an instance of an object."
error when I attempt this. Any suggestions or pointers?
 
W

Will Lastname

I filled one of the datasets in Function A and the other in Function B
and returned them. Am I not able to access them this way?
 
S

S. Justin Gengo

Will,

Running in debug mode, does your for next loop error out right away, or make
it through at least one iteration first?

I'm wondering if your tables have the same number of columns in them. If
they don't...

--
Sincerely,

S. Justin Gengo, MCP
Web Developer / Programmer

www.aboutfortunate.com

"Out of chaos comes order."
Nietzsche
 
W

Will Lastname

It errors even if I try:

response.write(ds.Tables("Table").Rows(0)("ColumnName"))

I'm getting so frustrated with this.

Thanks for helping out!
 
S

S. Justin Gengo

Well, then it's not finding any columns at all for that table.

Try this code (it uses index numbers for the table, rows, columns so that if
the problem is the wrong table name you'll know):

'---Start by making certain that the dataset actually contains at least the
one table.
If ds.Tables(0) Is Nothing Then
Response.Write("Table Not Found!" & "<br>")
Else
'---Check if any rows exist
If ds.Tables(0).Rows.Count > 0 Then
Response.Write(ds.Tables(0).Rows.Count.ToString & "<br>")
Response.Write(ds.Tables(0).Rows(0).Columns(0).ColumnName)
Else
Response.Write("No Rows Found!")
End If
End If

--
Sincerely,

S. Justin Gengo, MCP
Web Developer / Programmer

www.aboutfortunate.com

"Out of chaos comes order."
Nietzsche
 
W

Will Lastname

This writes the name of the column name in the function where I fill
the dataset. If I try to compare a dataset in another function to this
dataset then I get an error.
 
S

S. Justin Gengo

Will,

I didn't realize you were declaring the dataset object inside of one
function and then using it again in another...

Objects declared within a function are only available within that function.

Instead declare your dataset object as a dataset outside of the first
function near the top of the page but inside of the class.

Private ds As DataSet

Then fill the dataset inside of your first function.

Private Function Number1()
'---Fill ds here
End Function

You won't have to declare ds inside of the function it's available
throughout the whole class.

Now it won't be nothing in the second function.


--
Sincerely,

S. Justin Gengo, MCP
Web Developer / Programmer

www.aboutfortunate.com

"Out of chaos comes order."
Nietzsche
 
W

Will Lastname

Object reference not set to an instance of an object

Still getting this. I'm going to have to bag this idea for now.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,479
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top