gpt4 book ai didi

c# - 列 '[Group]' 不属于表表

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:29 25 4
gpt4 key购买 nike

使用遗留的 SQL Server 表,它显示了一个名为 [Group] 的可选列,如果从代码中完全省略它,插入命令就可以正常工作。问题与该特定列有关。

我有什么:

daCust.InsertCommand = new SqlCommand("insert into dbo.TimeRouteTest ([Group], Route, Step_1) values (@Group, @Route, @Step_1)", con);

daCust.InsertCommand.Parameters.Add(new SqlParameter("[Group]", SqlDbType.Int, 4, "[Group]"));
daCust.InsertCommand.Parameters.Add(new SqlParameter("Route", SqlDbType.NVarChar, 100, "Route"));
daCust.InsertCommand.Parameters.Add(new SqlParameter("Step_1", SqlDbType.NVarChar, 50, "Step_1"));

然后

DataRow newRow = ds.Tables[0].NewRow();
newRow["[Group]"] = Convert.ToInt32(myGroup);
newRow["Route"] = mroute;
newRow["Step_1"] = mStep_1;

注意:我预处理这些数据以确保它是干净的,我去除了单引号等。mroute 和 mStep_1 只是保存从另一个函数传递的文本数据的局部变量。 myGroup 也是一个从网络服务传递值的本地变量。然后我跟进:

ds.Tables[0].Rows.Add(newRow);
daCust.Update(ds);

如果我注释掉 [group] 行,该命令可以正常工作。关于为什么会失败以及如何解决它的任何帮助?我知道“group”是一个保留关键字,但添加方括号应该可以使其可用,或者我是这么认为的。有趣的是,我可以查询这个表,并从其他行的 [group] 列中获取值,所以我知道该列确实存在。只是不确定为什么我在插入时找不到它...

编辑:如果我使用这段代码,它工作正常:

daCust.InsertCommand = new SqlCommand("insert into dbo.TimeRouteTest (Route, Step_1) values (@Route, @Step_1)", con);

daCust.InsertCommand.Parameters.Add(new SqlParameter("Route", SqlDbType.NVarChar, 100, "Route"));
daCust.InsertCommand.Parameters.Add(new SqlParameter("Step_1", SqlDbType.NVarChar, 50, "Step_1"));

DataRow newRow = ds.Tables[0].NewRow();
newRow["Route"] = mroute;
newRow["Step_1"] = mStep_1;

ds.Tables[0].Rows.Add(newRow);

daCust.Update(ds);

这几乎将问题隔离到名为 [Group] 的特定列,并且没有方括号组合或我认为尝试的其他方式可以使它起作用。执行 select * from TimeRouteTest 然后从 dr[2] 中提取值确实有效,这是该列的索引位置。除了报废表和使用更好的 col 名称之外,如何解决?奇怪的是,查看 Visual Studio 中的表定义,它显示 col 名称为 [Group],但如果我查看表中的数据,它仅显示 Group 作为结果中的标题/标签...

编辑:

行:

daCust.InsertCommand.Parameters.Add(new SqlParameter("[Group]", SqlDbType.Int, 4, "[Group]"));

daCust.InsertCommand.Parameters.Add(new SqlParameter("@Group", SqlDbType.Int, 4, "[Group]"));

daCust.InsertCommand.Parameters.Add(new SqlParameter("@[Group]", SqlDbType.Int, 4, "[Group]"));

全部失败并出现错误:

System.ArguementException: Column '[Group]' does not belong to table Table.

编辑:发现(语法)错误。在用头撞墙 3 小时后,下面的代码实际有效:

 daCust.InsertCommand = new SqlCommand("insert into dbo.TimeRouteTest ([Group], Route, Step_1) values (@Group, @Route, @Step_1)", con);

daCust.InsertCommand.Parameters.Add(new SqlParameter("Group", SqlDbType.Int, 4, "Group"));
daCust.InsertCommand.Parameters.Add(new SqlParameter("Route", SqlDbType.NVarChar, 100, "Route"));
daCust.InsertCommand.Parameters.Add(new SqlParameter("Step_1", SqlDbType.NVarChar, 50, "Step_1"));

DataRow newRow = ds.Tables[0].NewRow();
newRow["Group"] = Convert.ToInt32(myGroup);
newRow["Route"] = mroute;
newRow["Step_1"] = mStep_1;

事实证明,唯一需要括号的地方是声明列名称时的插入语句,将它们添加到其他任何地方都会导致各种错误。我最好的猜测是,当 Visual Studio 遇到关键字 col 名称时,它会自动在 col 名称上显示括号,从而导致部分混淆,因此在导出表定义时,括号似乎是名称的一部分,而实际上它们不是。

只有在使用某些 SQL 语句时才需要括号,列名是 SQL Server 的保留关键字。至少可以这么说!

最佳答案

事实证明,唯一需要括号的地方是声明列名称时的插入语句,将它们添加到其他任何地方都会导致各种错误。我最好的猜测是,当 Visual Studio 遇到关键字 col 名称时,它会自动在 col 名称上显示括号,从而导致部分混淆,因此在导出表定义时,括号似乎是名称的一部分,而实际上它们不是。只有在使用某些sql 语句时才需要括号,col 名称是一个保留的sql 关键字。正确的代码显示在问题的底部。感谢 GSerg 的验证。如果这是一个业余错误,我很抱歉,这让我难住了一段时间。

关于c# - 列 '[Group]' 不属于表表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49473356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com