Visual Studio中C#调用FindByID方法无法识别的问题
C# 强类型DataSet FindByID方法无法识别问题
问题表现
调用C#强类型DataSet生成的FindByID方法时出现识别异常:
- 如下写法仅
FindBy系列方法无法识别,其余代码无报错:
Database3DataSet.MemlistRow customerRow = Database3DataSet.MemlistDataTable.FindByID(Int32.Parse(textBox2.Text));
- 公开示例中给出的写法为直接通过表对象调用,而非DataTable类:
Database3DataSet.Memlist.FindByID(Int32.Parse(textBox2.Text));
实际编码时上述示例写法无对应智能提示。解决方案资源管理器中显示MemlistDataTable与对应Memlist数据表等价,易被误认为是Visual Studio 2022版本变更导致的差异。
其余关联异常:
Dim变量声明写法完全无法被识别- 换用
Select方法实现按ID查询同样失败 - 官方帮助文档所有示例均为直接通过
Memlist表对象调用方法,而非MemlistDataTable类 - 此前曾写出过可正常识别
FindByID方法的简化代码,但后续逻辑运行异常,且当前已遗失该代码片段。
核心原因
- 语法混淆:
Dim是VB.NET的变量声明关键字,C#中不存在该语法,直接写必然报错,和VS版本无关。 - 静态/实例方法调用混淆:
FindByID是强类型DataSet为MemlistDataTable生成的实例方法,不是静态方法。直接通过Database3DataSet.MemlistDataTable类名调用静态方法,必然找不到匹配方法。 - 类名/实例名混淆:示例里的
Database3DataSet.Memlist不是类名访问,是DataSet实例下的表属性访问。旧版本VS设计器会自动生成和DataSet类同名的全局实例字段,所以示例里可以直接写和类名同名的实例;VS2022调整了强类型DataSet的生成规则,不会默认生成同名全局实例,直接写类名当然出不来智能提示。
正确实现
首先需要创建(或引用设计器已经生成的)DataSet实例,再通过实例调用表的FindByID方法:
// 如果你已经在窗体设计器拖入了DataSet控件,直接使用设计器生成的实例名即可,不需要重复new Database3DataSet dataSet = new Database3DataSet(); // 通过实例访问Memlist表,再调用FindByID方法 Database3DataSet.MemlistRow customerRow = dataSet.Memlist.FindByID(int.Parse(textBox2.Text)); // 判空逻辑不要漏,避免输入的ID不存在时返回null触发空引用 if (customerRow != null) { // 后续业务逻辑写在这里 }
如果要用Select方法实现,同样需要基于表实例调用:
var searchRows = dataSet.Memlist.Select($"ID = {int.Parse(textBox2.Text)}"); if (searchRows.Length > 0) { var customerRow = (Database3DataSet.MemlistRow)searchRows[0]; // 后续业务逻辑 }
内容的提问来源于stack exchange,提问作者James Lowen
相关产品推荐
相关产品推荐

