You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET C#中DataTable单行数据转数组及SQL错误排查

问题分析与解决方案

嘿,我一眼就揪出了导致这个SQL异常的问题所在!

核心错误点

你写的SQL查询语句里有个低级语法错误:在SELECT的列列表中,你把[7],[8]误写成了[7].[8]。SQL会把[7].[8]解析成表名为7、列名为8的多部分标识符,但你的目标表是Seatlist,根本不存在名为7的表,所以直接抛出了System.Data.SqlClient.SqlException: 多部分标识符"7.8"无法绑定的错误。

另外还有个小细节:你添加了@Seatlist参数,但SQL语句里并没有用到它,这个多余的参数可以删掉,避免代码冗余。

修正后的完整代码

// 修正SQL语句中的[7].[8]为[7],[8],并移除未使用的@Seatlist参数
SqlCommand cmdp = new SqlCommand("SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31],[32],[33],[34],[35],[36],[37],[38],[39],[40],[41],[42],[43],[44],[45],[46],[47],[48],[49],[50],[51],[52],[53],[54],[55],[56],[57],[58],[59],[60],[61],[62],[63],[64],[65],[66],[67],[68],[69],[70],[71],[72],[73],[74],[75],[76],[77],[78] from [Seatlist] where (([FlightNo] = @FN) AND ([Origin] = @Ori) AND ([Destination] = @Des) AND ([DepartureTimeDay] = @Dep) AND ( [DepartureTimeMonths] = @Dem) AND ( [DepartureTimeYears] = @Dey) AND ( [DepartureTime] = @Det))", con);

// 移除未使用的@Seatlist参数
cmdp.Parameters.AddWithValue("@FN", FlightNo.Text);
cmdp.Parameters.AddWithValue("@Ori", Origin.Text);
cmdp.Parameters.AddWithValue("@Des", Destination.Text);
cmdp.Parameters.AddWithValue("@Dep", DepartDay.Text);
cmdp.Parameters.AddWithValue("@Dem", DepartMonth.Text);
cmdp.Parameters.AddWithValue("@Dey", DepartureTimeYears.Text);
cmdp.Parameters.AddWithValue("@Det", DepartureTime.Text);

DataTable dtable = new DataTable();
dtable.Load(cmdp.ExecuteReader());

// 因为确定只有一行,直接取Rows[0]更简洁
DataRow row = dtable.Rows[0];
object[] array1 = row.ItemArray;
int[] array2 = Array.ConvertAll(array1, p => Convert.ToInt32(p));

额外优化建议

既然你已经明确DataTable仅包含一行数据,完全没必要用dtable.AsEnumerable().Take(1).ToArray()绕一圈,直接通过dtable.Rows[0]获取行数据会更简洁直观。

内容的提问来源于stack exchange,提问作者Shi Jie Tio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:36:10