[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

zino

5/4/2007 9:04:00 PM

in ASP net 2.0
a function that query/add item to cache:
public function1
.... ... ..
If HttpContext.Current.Cache(myKey) Is Nothing Then
Dim ds As DataSet = functionToCreateDataset.... ...
HttpContext.Current.Cache.Insert(myKey, ds, Nothing)
End If
Return HttpContext.Current.Cache

in the web form code behind, I have:
Dim ds As DataSet = Cache("myKey")
dim ds as dataset
ds.Tables(0).Columns.Add("customCol", GetType(String), "col1+'- '+col2")


the problem is, when "function1" create the cache the first time, the
statement:
ds.Tables(0).Columns.Add("col1", GetType(String), "col1+'- '+col2")
works fine. But when "function1" returned the cached item, the same
statement display the error:
"A column named 'customCol' already belongs to this DataTable."

it looks like the cache get changed too when the dataset derived from it is
changed.
how can I fix that ?
4 Answers

Alvin Bruney [MVP]

5/5/2007 1:31:00 PM

0

This is an error, you have ds declared twice, it's most likely a typo. I
wouldn't expect that to compile:

Dim ds As DataSet = Cache("myKey")
dim ds as dataset

When you first create your dataset, it contains a column named customCol.
You can, at any point later, add another column with that name because
column names are explicitly unique.

--
Regards,
Alvin Bruney
------------------------------------------------------
Shameless author plug
Excel Services for .NET is coming...
OWC Black book on Amazon and
www.lulu.com/owc
Professional VSTO 2005 - Wrox/Wiley


"zino" <zino@noemail.noemail> wrote in message
news:4547E8B2-3FD2-4CD4-960B-ABE6F31E69F4@microsoft.com...
> in ASP net 2.0
> a function that query/add item to cache:
> public function1
> ... ... ..
> If HttpContext.Current.Cache(myKey) Is Nothing Then
> Dim ds As DataSet = functionToCreateDataset.... ...
> HttpContext.Current.Cache.Insert(myKey, ds, Nothing)
> End If
> Return HttpContext.Current.Cache
>
> in the web form code behind, I have:
> Dim ds As DataSet = Cache("myKey")
> dim ds as dataset
> ds.Tables(0).Columns.Add("customCol", GetType(String), "col1+'- '+col2")
>
>
> the problem is, when "function1" create the cache the first time, the
> statement:
> ds.Tables(0).Columns.Add("col1", GetType(String), "col1+'- '+col2")
> works fine. But when "function1" returned the cached item, the same
> statement display the error:
> "A column named 'customCol' already belongs to this DataTable."
>
> it looks like the cache get changed too when the dataset derived from it
> is
> changed.
> how can I fix that ?


zino

5/7/2007 1:47:00 PM

0

there is a little confusion here.
the issue is :
- a datatable consisting of 2 column is created and added to the cache.
(cache("myDt") )

- a variable derived from a call to this cache :
Dim dt2 As DataTable = CType(Cache("myDt"), DataTable)

the following: dt2.Columns.Count will return: 2


now,
any change to dt2 as:
dt2.Columns.Add("customCol", GetType(String), "col1+'- '+col2") , is
changing cache("myDt") too.

after the previous statement:
the following:
Dim dt3 As DataTable = CType(Cache("myDt"), DataTable)
dt3.Columns.Count will return: 3


why 3 ??
Why the change done on dt2 propagated back to the cache ?





Alvin Bruney [MVP]

5/7/2007 11:21:00 PM

0

Sorry if I am out of left field because the original thread isn't included.
Cache holds live object references not copies. Well, the copy is a pointer
reference that *points to the live object.

--
Regards,
Alvin Bruney
------------------------------------------------------
Shameless author plug
Excel Services for .NET is coming...
OWC Black book on Amazon and
www.lulu.com/owc
Professional VSTO 2005 - Wrox/Wiley


"zino" <zino@noemail.noemail> wrote in message
news:7FDEF93B-392A-460A-A74E-516D4DA25ABB@microsoft.com...
> there is a little confusion here.
> the issue is :
> - a datatable consisting of 2 column is created and added to the cache.
> (cache("myDt") )
>
> - a variable derived from a call to this cache :
> Dim dt2 As DataTable = CType(Cache("myDt"), DataTable)
>
> the following: dt2.Columns.Count will return: 2
>
>
> now,
> any change to dt2 as:
> dt2.Columns.Add("customCol", GetType(String), "col1+'- '+col2") , is
> changing cache("myDt") too.
>
> after the previous statement:
> the following:
> Dim dt3 As DataTable = CType(Cache("myDt"), DataTable)
> dt3.Columns.Count will return: 3
>
>
> why 3 ??
> Why the change done on dt2 propagated back to the cache ?
>
>
>
>
>


zino

5/8/2007 12:20:00 PM

0

Thank you.
that answers my question.

"Alvin Bruney [MVP]" wrote:

> Sorry if I am out of left field because the original thread isn't included.
> Cache holds live object references not copies. Well, the copy is a pointer
> reference that *points to the live object.
>
> --
> Regards,
> Alvin Bruney
> ------------------------------------------------------
> Shameless author plug
> Excel Services for .NET is coming...
> OWC Black book on Amazon and
> www.lulu.com/owc
> Professional VSTO 2005 - Wrox/Wiley
>
>
> "zino" <zino@noemail.noemail> wrote in message
> news:7FDEF93B-392A-460A-A74E-516D4DA25ABB@microsoft.com...
> > there is a little confusion here.
> > the issue is :
> > - a datatable consisting of 2 column is created and added to the cache.
> > (cache("myDt") )
> >
> > - a variable derived from a call to this cache :
> > Dim dt2 As DataTable = CType(Cache("myDt"), DataTable)
> >
> > the following: dt2.Columns.Count will return: 2
> >
> >
> > now,
> > any change to dt2 as:
> > dt2.Columns.Add("customCol", GetType(String), "col1+'- '+col2") , is
> > changing cache("myDt") too.
> >
> > after the previous statement:
> > the following:
> > Dim dt3 As DataTable = CType(Cache("myDt"), DataTable)
> > dt3.Columns.Count will return: 3
> >
> >
> > why 3 ??
> > Why the change done on dt2 propagated back to the cache ?
> >
> >
> >
> >
> >
>
>
>