DataSet case sensitive issue

今天系统进行了单元测试发现一个bug,不知道怎么回事。我们整个小组花费了半天时间终于找到了问题所在,就是:DataSet case sensitive

原以为在DataSet.Tables.Add(new DataTable(string strTableName))时,是可以随便的,没有想到就是这个东西发生了问题。google 了一下,发现这篇文章:
http://blogs.msdn.com/smartclientdata/archive/2005/10/07/478087.aspx  ( English )

突然大梦清醒,原来Dataset 也是 case sensitive (大小写敏感)的。查询MSDN 中关于 Dataset 的说明,有这么一段:
http://msdn2.microsoft.com/en-us/library/system.data.dataset.aspx

Whereas DataTable objects contain the data, the DataRelationCollection allows you to navigate though the table hierarchy. The tables are contained in a DataTableCollection accessed through the Tables property. When accessing DataTable objects, note that they are conditionally case sensitive. For example, if one DataTable is named "mydatatable" and another is named "Mydatatable", a string used to search for one of the tables is regarded as case sensitive. However, if "mydatatable" exists and "Mydatatable" does not, the search string is regarded as case insensitive. For more information about working with DataTable objects, see Creating a DataTable.

其它的先不管了,我就看到了对case  sensitive 的描述:

如果 DataSet 中包含名为 "mydatatable" 和另一个 "Mydatatable"时,在使用表查询时,Dataset 是大小写敏感的,如果只包含一个 "mydatatable" ,则又不是大小写敏感的。

看到这里,才发现原来是对DataSet 的标操作时出现了问题。更改后一切ok。

<think>我们正在讨论C# DataSet的结构细节,特别是DataSetName、CaseSensitive和Container等属性。根据引用内容,DataSet是内存中的数据缓存,由多个DataTable和相关对象组成。以下是这些属性的详细解释: 1. **DataSetName**: - 功能:标识DataSet的名称,可在构造函数中设置或通过属性修改。 - 引用[2]示例:创建时命名为"office",后改为"unknown"[^2]。 - 代码示例: ```csharp DataSet ds = new DataSet("MyDataSet"); // 构造函数设置 ds.DataSetName = "NewName"; // 属性修改 ``` 2. **CaseSensitive**: - 功能:控制DataSet内字符串比较是否区分大小写,默认false。 - 影响范围:DataTable中的排序、搜索等操作。 - 示例: ```csharp ds.CaseSensitive = true; // 启用区分大小写 ``` 3. **Container** (来自Component类): - 功能:获取或设置组件的容器(实现IContainer接口的对象),用于设计时集成。 - 注意:日常编程较少使用,多用于设计器场景。 4. **其他关键成员**: - **Tables**: DataTableCollection类型,存储所有DataTable[^1]。 - **Relations**: DataRelationCollection类型,管理表间关系[^1]。 - **Namespace** 和 **Prefix**: 控制XML序列化时的命名空间[^1]。 **代码示例综合**: ```csharp DataSet company = new DataSet("Company"); company.CaseSensitive = false; // 默认不区分大小写 // 添加DataTable DataTable departments = new DataTable("Departments"); company.Tables.Add(departments); // 获取DataSet名称 Console.WriteLine(company.DataSetName); // 输出: Company ``` §§相关问题§§ 1. DataSet中如何管理表间关系(DataRelation)? 2. 如何通过DataSet将数据导出为XML格式? 3. DataSet与DataTable在功能上有何主要区别? </think>### C# DataSet 结构详解 在 C# 中,`DataSet` 是内存中的数据容器,其结构包含以下关键属性: #### 1. **DataSetName** 表示数据集的名称标识符,用于在代码中引用特定数据集: ```csharp DataSet salesData = new DataSet("Sales2023"); // 构造函数设置名称 Console.WriteLine(salesData.DataSetName); // 输出:Sales2023 // 动态修改名称 salesData.DataSetName = "Q4_SalesData"; Console.WriteLine(salesData.DataSetName); // 输出:Q4_SalesData ``` - 可通过构造函数或属性赋值 - 名称默认值为"NewDataSet"(未指定时) - XML 序列化时作为根元素名称使用[^2] #### 2. **CaseSensitive** 控制字符串比较是否区分大小写: ```csharp DataSet data = new DataSet(); data.CaseSensitive = true; // 启用大小写敏感 // 影响场景: DataTable orders = data.Tables.Add("Orders"); orders.Columns.Add("ProductCode", typeof(string)); // 大小写敏感时视为不同列 orders.Columns.Add("productcode", typeof(string)); // 允许添加(名称不同) ``` - 默认值:`false`(不区分大小写) - 影响范围: - 列名/表名查找(如 `Tables["Orders"]` 与 `Tables["orders"]`) - `DataTable.Select()` 等过滤操作 - 关系(`DataRelation`)匹配 - 优先级低于 `DataTable` 的同名属性[^1] #### 3. **Container**(继承自 Component) 提供设计时容器支持: ```csharp // 设计器场景示例 IContainer designContainer = new Container(); DataSet ds = new DataSet(); ds.Container = designContainer; // 关联设计容器 // 获取容器信息 if(ds.Container != null) { Console.WriteLine($"组件位于 {ds.Container.Components.Count} 个容器中"); } ``` - 用途:在可视化设计器(如 WinForms)中管理组件生命周期 - 默认值:`null`(运行时通常无需手动设置) - 实现 `System.ComponentModel.IComponent` 接口[^1] #### 4. 其他核心结构成员 | 属性/方法 | 类型 | 说明 | |---------------------|-----------------------|----------------------------------------------------------------------| | **Tables** | `DataTableCollection` | 包含所有 `DataTable` 对象的集合(如 `ds.Tables["Products"]`)[^1] | | **Relations** | `DataRelationCollection` | 管理表间关系(如主键-外键关联) | | **Namespace** | `string` | XML 序列化时的命名空间(默认为空) | | **Prefix** | `string` | XML 命名空间别名(默认为空) | | **Clear()** | `method` | 清除所有表中的数据[^4] | | **Copy()** | `method` | 创建包含结构和数据的完整副本 | #### 示例:综合使用 ```csharp // 创建带名称的数据集 DataSet company = new DataSet("CompanyData"); company.CaseSensitive = false; // 全局不区分大小写 // 添加表格(Tables集合) DataTable employees = new DataTable("Employees"); company.Tables.Add(employees); // 设置XML序列化属性 company.Namespace = "urn:company-schema"; company.Prefix = "cmp"; ``` 该结构设计使 `DataSet` 能有效管理内存中的关系型数据,支持离线操作和XML序列化[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值