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

时间:2014-11-26 14:04:12

标签: c# sql

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

  

名称为&#39; Prep_By&#39;的字段或媒体资源未在所选数据源中找到。

我不明白问题是什么,领域&#39; Prep_By&#39;存在于我的数据库中。

这是我得到的:

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();
    }

}

3 个答案:

答案 0 :(得分:1)

这意味着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();

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

答案 1 :(得分:0)

您正在使用数据集绑定网格,而在网格中您正在使用[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查询中进行更改..

答案 2 :(得分:0)

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