【问题标题】:Column [X] does not belong to table server error - why?列 [X] 不属于表服务器错误 - 为什么?
【发布时间】:2012-12-26 09:01:27
【问题描述】:

我一直在使用相同的一行代码将数据库中的特定字段保存到变量中。

variable = Convert.ToType(dt.Rows[0]["[Column Name]"]);

问题是我得到这个烦人的列不存在服务器错误。使用像“Select * From Table”这样简单的 sql 查询的不同表和不同字段会发生这种情况。 我已经检查了无数次列名是否正确,我尝试在列名中使用空格并且没有 - 似乎没有任何帮助。

知道是什么原因造成的以及如何解决吗? 这是堆栈跟踪:

[ArgumentException: Column '[Long MSDS Update]' does not belong to table Table.]
System.Data.DataRow.GetDataColumn(String columnName) +5253191
System.Data.DataRow.get_Item(String columnName) +13
SiteMaster.msds_update() in
c:\Users\nravid\Desktop\School\Project\PhillipsSite\Site.master.cs:198
SiteMaster.master_Page_PreLoad(Object sender, EventArgs e) in c:\Users\nravid\Desktop\School\Project\PhillipsSite\Site.master.cs:92
System.EventHandler.Invoke(Object sender, EventArgs e) +0
System.Web.UI.Page.OnPreLoad(EventArgs e) +121
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +699

谢谢。

【问题讨论】:

  • 指定的列名是否拼写正确?您还应该仔细检查您的查询是否从正确的表中检索。

标签: c# asp.net mysql sql-server sql-server-2008


【解决方案1】:

围绕它进行测试

if (dt.Columns.Contains("SomeColumnName"))
{
}
else
{
    // Danger Will Robinson!. Danger!
}

【讨论】:

    【解决方案2】:

    您收到此错误是因为您包含了括号 [ ]。删除方括号,它应该可以工作

    使用

    dt.Rows[0]["Column Name"]
    

    代替

    dt.Rows[0]["[Column Name]"]
    

    你的情况

    dt.Rows[0]["Long MSDS Update"]
    

    【讨论】:

    • 该死!该死的该死的该死的该死的。 :) :) +1
    • 早上醒来,看到你在 stackoverflow 上的问题得到了解答……感觉就像圣诞节的早晨 :-)
    【解决方案3】:

    运行下面的代码并确保输出符合预期。

    Debug.WriteLine(dt.TableName);
    foreach(DataColumn column in dt.Columns)
    {
        Debug.WriteLine("\t" + column.ColumnName);
    }
    

    【讨论】:

    • Visual Studio 中的输出窗口(查看 -> 输出或 Ctrl+W,O)。
    • 然后是的,它打印出的列名与数据库中的列名完全相同,与代码中的列名完全相同。
    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多