繁体   English   中英

`DataTable` 不包含“填充”的定义 - c#

[英]`DataTable` does not contain a definition for 'Fill' - c#

我不明白为什么在阅读有关.Fill()文档后出现错误。 我是否错过了导致此错误返回的内容?

    protected void FillData()
    {
        using (SqlConnection connection = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB;AttachDbFilename= C:\Users\home\Documents\C# Programs\shop\Database.mdf ;Integrated Security = True"))
        {
            connection.Open();

            using (SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from Employee", connection))
            {
                DataTable table = new DataTable();
                table.Fill(table);
                employeeDataGridView.DataSource = table;
            }

        }
    }

问题出在这行代码

table.Fill(table);

你不能用桌子来填满你的桌子。 正确的语法是

dataAdapter.Fill(table) 

您不能以这种方式填充 DataTable,您需要填充 DataAdapter,使用 DataSet,然后设置 DataGridView 以使用它。

using (SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from Employee", connection))
{
    var ds = new DataSet();
    dataAdapter.Fill(ds);
    employeeDataGridView.DataSource = ds.Tables[0];
}

对此进行编码的最简洁方法是:

protected void FillData()
{

        using (SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from Employee", @"Data Source = (LocalDB)\MSSQLLocalDB;AttachDbFilename= C:\Users\home\Documents\C# Programs\shop\Database.mdf ;Integrated Security=True"))
        {
            DataTable table = new DataTable();
            dataAdapter.Fill(table);
            employeeDataGridView.DataSource = table;
        }


}

如果你把你的连接字符串放在一个静态的“全局”变量中,它会变得更整洁

注意事项:

  • 使用带有两个字符串的 dataadapter 构造函数 - 它将为您创建连接和命令
  • 您不需要打开适配器的连接 - 它知道如何
  • 这意味着您只能使用一个
  • 如果您的 sql 需要参数,请将它们放入 using as dataAdapter.SelectCommand.Paramaters.Add...
  • 您可以将其转换为接受任何 sql 字符串和参数集合并返回数据表的方法
  • 考虑在您的 sql 中放置一个 WHERE 子句; 用户可能不喜欢看到包含 20,000 名员工的网格,因为这使得编辑少数员工变得更加困难

最好将数据集添加到您的项目中(右键单击项目,添加>>新项目,选择数据集 - 它为您提供看起来像数据库可视化设计表面的东西,您可以向其中添加查询,创建成为可以成为组件的数据表被添加到您的表单/自动创建数据绑定控件)并创建强类型数据表和表适配器

比这更好的替代方法是使用 Dapper 和强类型 POCO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM