Visual Studio 2017中类型转换及列名识别错误求助
嘿,这俩都是我当初刚用ADO.NET时踩过的坑,给你一步步拆解:
一、参数1无法从System.Data.SqlClient.SqlDataAdapter转换为System.Data.DataSet
这个错误几乎都是方法参数传反或者类型误用导致的,常见场景:
你搞反了
Fill方法的参数顺序:
正确的SqlDataAdapter.Fill()用法是把DataSet/DataTable作为参数传给适配器,比如:SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); adapter.Fill(ds); // 正确:适配器把数据填充进DataSet如果你写成
ds.Fill(adapter),就会报错——因为DataSet.Fill()需要的是另一个数据源,不是适配器。误把适配器对象赋值给DataSet变量:
比如手滑写了DataSet myDs = myAdapter;,这种明显的类型不匹配也会触发这个错误,检查下变量赋值的地方。
二、else if语句中列名不被识别
这个问题的排查方向可以从这几个点入手:
先查SQL查询语句:
你代码里访问的列,必须在SQL的SELECT语句里存在!比如你代码里用row["OrderID"],那SQL得是SELECT OrderID, OrderDate FROM Orders,不能漏查这个列。如果SQL里没查,DataSet的DataTable里自然没有这个列。检查列名的拼写和大小写:
虽然SQL Server默认不区分大小写,但DataSet里的列名是严格匹配的(除非你特意配置过)。比如SQL里写的是orderid,代码里写成OrderID就会找不到,要保证完全一致。确认访问的是正确的DataTable:
如果你的DataSet里有多个表,别搞错索引!比如ds.Tables[0]可能不是你要的那张表,换成用表名访问更可靠:ds.Tables["Orders"],避免索引对应错误。特殊列名要加引号/方括号:
如果你的列名包含空格(比如Full Name)或者特殊字符,SQL查询时要写成SELECT [Full Name] FROM ...,代码里访问的时候也要用row["Full Name"],不能直接写row[Full Name](没引号会被当成变量)。
如果还是找不到问题,可以把你相关的代码片段贴出来,能更精准定位~
内容的提问来源于stack exchange,提问作者AbeerK K

