好吧,一方面,您正在使这种方式变得比需要的更复杂。我永远不会知道你在一张表上有 96 列是怎么回事,但要选择你需要的 45 列,你只需要在 select 语句中输入 45 列。
下面是 SQL 的样例。当然,我不会输入 45 列,但你明白了:
SELECT FirstName, LastName, Age, [keep going to 45] FROM tblUsers
我想解决的另一个问题是您执行 SQL 语句的方式。NEVER EVER EVER EVER EVER 将字符串变量连接成一个 SQL 字符串。确保您至少使用参数化查询。但我建议有时也研究一下 Entity Framework 或 LINQ to SQL。
SqlCommand scomm = new SqlCommand("UPDATE tblUsers SET FirstName='" + firstName + "' WHERE UserID='" + userId + "'");
那^^^等于非常糟糕。想一想如果用户决定偷偷摸摸地取自己的名字会发生什么Harry' AND Admin='true
。你可能会想,“哦,好吧,我只firstName = firstName.Replace("'","''");
处理我的所有变量。如果你这样做,我会亲自来打你。像这样参数化你的查询:
SqlCommand scomm = new SqlCommand("UPDATE tblUsers SET FirstName=@FirstName WHERE UserID=@UserID");
scomm.Parameters.Add(new SqlParameter("FirstName", firstName));
scomm.Parameters.Add(new SqlParameter("UserID", userId));
那^^^等于好多了。
编辑此外,如果您有机会重新处理您拥有的表的怪物,请尝试将字段子集重构为它们自己的实体(表)并通过参考 ID 链接它们。例如,假设我有一个名为 [tlbUsers] 的表,它包含有关特定用户的信息。像这样:
[tlbUsers]
UserID
FirstName
LastName
Age
Username
StreetAddress
City
State
ZipCode
Country
Phone
考虑重构,以便相关值有自己的表。您可以从此用户表中获取所有地址信息并将其放入名为 tlbAddresses 的表中。这不仅会在提取数据时更容易处理,而且可能会为您节省数据库中的空间。例如,如果 Harry 和 Sally 都住在同一个家中,他们可以引用相同的地址记录。
[tlbUsers]
FirstName
LastName
Age
Username
AddressID
Phone
[tlbAddresses]
AddressID
Street
City
State
ZipCode
Country