---
title: "Why are typed data tables columns declared \"internal\"?"
url: "https://osherove.com/blog/2003/11/17/why-are-typed-data-tables-columns-declared-quotinternalquot.md"
canonical: "https://osherove.com/blog/2003/11/17/why-are-typed-data-tables-columns-declared-quotinternalquot.html"
published: "2003-11-17T11:36:00"
updated: "2003-11-17T11:36:00"
tags: [".Net Original"]
author: "Roy Osherove"
description: "Here's a question that Oskar Austegard left in response to what I wrote ,oh such a long time ago(6 months?), about typed datasets being scalable : How exactly does one go about using a TDS effectively in a different…"
usage: "Licensed under CC BY 4.0 — reuse, quote and adapt with attribution (Roy Osherove, link to the original page)."
license: "https://creativecommons.org/licenses/by/4.0/"
---

# Why are typed data tables columns declared "internal"?

By Roy Osherove November 17, 2003 In [.Net Original](https://osherove.com/blog/category/net-original)

**Historical article** · Originally published November 17, 2003; technical details may be outdated.

Here's a question that Oskar Austegard left in response to what I wrote ,oh such a long time ago(6 months?), about [typed datasets being scalable](http://weblogs.asp.net/rosherove/posts/6489.aspx):

_How exactly does one go about using a TDS effectively in a different project, given that the DataColumns are marked as internal?

Say I have the folowing solution with three projects:
MySol
\* DAL
\* Entities
\* Web

If I create all my TDS in the Entities project, how will I be able to reference the DataColumn properties from within the DAL or Web project? This appears to me to be a major drawback of using TDS - at least as VS.NET generates them.

Thanks,

Oskar_

**My response:**

Hi Oskar. These are declared internal because what you **really** want to use from external components are the "public" properties that each typed row exposes which are essentially the columns that you are looking for. For example, you should get a CustomersDatatable\[rowindex\].CustomerName if you want the value for the customer name column for a specific row. you can also get a “regular“ row by doing CustomersDatatable.Rows\[rowindex\] and casting it to a “CustomersDataRow“ object which will again provide you with all the properties you are looking for.

So why hide the columns themselves? I asked [Mike Gunderloy](http://www.larkware.com/) and he came up with a reasonable explanation: To keep all that column access logic in one place (such as null return values and so on). Sounds reasonable to me..

## More in .Net Original

[All posts in .Net Original](https://osherove.com/blog/category/net-original)

- Nov 20, 2003

    ### [DotNetNuke Rocks!](https://osherove.com/blog/2003/11/20/dotnetnuke-rocks.html)

- Nov 17, 2003

    ### [VS.Net refactoring Lessons from IntelliJ IDEA (redux)](https://osherove.com/blog/2003/11/17/vsnet-refactoring-lessons-from-intellij-idea-redux.html)

- Nov 14, 2003

    ### [The Regulator 1.02b is out](https://osherove.com/blog/2003/11/14/the-regulator-102b-is-out.html)

- Nov 5, 2003

    ### [\[Tool\] The Regulator 1.02a is out](https://osherove.com/blog/2003/11/5/tool-the-regulator-102a-is-out.html)


---

## About the author

**Roy Osherove**: Senior Solutions Architect at AWS working on AI for production and AI-driven development; author of The Art of Unit Testing and Elastic Leadership, with about 20 years of consulting and training on unit testing, TDD, team leadership and continuous delivery.

### Sites

- [RobotPaper](https://robotpaper.ai/): This blog: AI patterns and anti-patterns, AI and coding agents, and engineering leadership.
- [osherove.com](https://osherove.com): Roy's personal site. Author of The Art of Unit Testing and Elastic Leadership; consulting and training on unit testing, TDD, team leadership and continuous delivery, plus about 20 years of blog posts.
- [The Art of Unit Testing](https://www.artofunittesting.com): The Art of Unit Testing, 3rd Edition (Manning): readable, maintainable, trustworthy unit tests, plus TDD workshops in C#, JavaScript, Java and Kotlin.
- [5whys.com](https://www.5whys.com): Roy's writing on software team leadership: self-organizing teams, surviving chaos, learning mode and the Elastic Leadership model.
- [Pipeline Driven](https://pipelinedriven.org): Continuous delivery and DevOps practices: build patterns, pipeline-friendly testing, DevOps metrics and enterprise DevOps.
- [Elastic Leadership](https://www.elasticleadership.com): Elastic Leadership, Roy's framework for software team leaders (survival, learning and self-organizing modes).

### Social

- X: https://x.com/royosherove
- LinkedIn: https://www.linkedin.com/in/osherove/

### Contact

- Contact form: https://forms.gle/jQSx5KoXvrVA1JCK7

### License

Licensed under CC BY 4.0 — reuse, quote and adapt with attribution (Roy Osherove, link to the original page). License: https://creativecommons.org/licenses/by/4.0/
