在所选数据源上找不到名称为 <变量> 的字段或属性

本文关键字:变量 字段 属性 数据源 找不到 | 更新日期: 2023-09-27 18:32:10

这是我第一次在 SQL.NET 和C#.NET中实现INNER JOIN查询。我收到此错误:

在所选数据源上找不到名称为"Prep_By"的字段或属性。

我不明白问题是什么,我的数据库中存在字段"Prep_By"。

这是我得到的:

private void LoadFeedback()
{
    con = new SqlConnection(Connectiontxt);
    con.Open();
    SqlCommand cmd;
    if (seardata == "")
    {
        cmd = new SqlCommand("SELECT  [Articles_Tbl].[Article_ID], [Articles_Tbl].[Title], [Articles_Tbl].[Mod_Date], [Users_Tbl].[Name] FROM [Articles_Tbl]  INNER JOIN [Users_Tbl] ON [Users_Tbl].[User_ID] = [Articles_Tbl].[Prep_By] where  [Articles_Tbl].[Status] = 'Approved' and (Article_ID = '')", con);
        cmd.CommandType = CommandType.Text;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "ss");
        gridrfqheader0.DataSource = ds.Tables["ss"];
        gridrfqheader0.DataBind();
    }
    else {
        cmd = new SqlCommand("SELECT  [Articles_Tbl].[Article_ID], [Articles_Tbl].[Title], [Articles_Tbl].[Mod_Date], [Users_Tbl].[Name] FROM [Articles_Tbl]  INNER JOIN [Users_Tbl] ON [Users_Tbl].[User_ID] = [Articles_Tbl].[Prep_By]  where  [Articles_Tbl].[Status] = 'Approved' and (Article_ID LIKE '%" + seardata + "%' or Title LIKE '%" + seardata + "%')", con);
        cmd.CommandType = CommandType.Text;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "ss");
        gridrfqheader0.DataSource = ds.Tables["ss"];
        gridrfqheader0.DataBind();
    }
}

在所选数据源上找不到名称为 <变量> 的字段或属性

这意味着 gridrfqheader0 包含对 Prep_By 的绑定引用,但您没有将其包含在 SELECT 语句中。

尝试添加它:

cmd = new SqlCommand("SELECT [Articles_Tbl].[Prep_By], [Articles_Tbl].[Article_ID])...

作为旁注,您的条件语句包含大量重复的代码。请考虑将数据获取到一个位置的代码移动到一个位置,以便没有重复的代码。例如:

if (isNullOrEmpty(seardata)) 
{   
cmd = new SqlCommand(your query); 
} 
else 
{  
 cmd = new SqlCommand(your other query); 
}
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "ss");
gridrfqheader0.DataSource = ds.Tables["ss"];
gridrfqheader0.DataBind();

它可以进一步重构,但这是一个好的开始。

您正在使用数据集来绑定网格,而在网格中,您正在使用不在数据集中的[Prep_By]字段。所以简单只是

在所选状态中添加"[Articles_Tbl].[Prep_By]"

cmd = new SqlCommand("SELECT [Articles_Tbl].[Prep_By],  [Articles_Tbl].[Article_ID], [Articles_Tbl].[Title], [Articles_Tbl].[Mod_Date], [Users_Tbl].[Name] FROM [Articles_Tbl]  INNER JOIN [Users_Tbl] ON [Users_Tbl].[User_ID] = [Articles_Tbl].[Prep_By] where  [Articles_Tbl].[Status] = 'Approved' and (Article_ID = '')", con);

在两个 SQL 查询中进行更改。

如果网格具有使用源名称创建的列Prep_By则必须从数据库中选择该列。