Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
`DataTable`不包含';填充&x27;-c#_C#_Sql - Fatal编程技术网

`DataTable`不包含';填充&x27;-c#

`DataTable`不包含';填充&x27;-c#,c#,sql,C#,Sql,我不明白为什么在阅读了有关.Fill()的文档后会出现错误。我是否遗漏了导致返回错误的内容 protected void FillData() { using (SqlConnection connection = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB;AttachDbFilename= C:\Users\home\Documents\C# Programs\shop\Database.m

我不明白为什么在阅读了有关
.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,使用数据集,然后将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需要参数,请使用as
    dataAdapter将它们放入数据库。选择Command.Paramaters.Add…
  • 您可以将其转换为一个方法,该方法接受任何sql字符串和参数集合,并返回一个datatable
  • 考虑在sql中添加WHERE子句;用户可能不喜欢看到一个拥有20000名员工的网格,因为它使编辑少数员工变得更加困难
最好将数据集添加到项目中(右键单击项目,添加>>新项,选择“数据集”-它提供类似于db可视化设计图面的内容,您可以向其中添加查询,创建成为可添加到窗体的组件的数据表/自动创建数据绑定控件)并创建强类型数据表和表适配器


另一种更好的方法是使用简洁、强类型的POCO

您不需要为此使用数据集;数据适配器可以直接填充数据表
SqlDataAdapter
具有
.fill
方法。
table.fill(table)似乎明显不正确。哇,我没听清楚。非常感谢。谢谢你和我分享这个;非常感谢!