DataGridView未显示表C#

DataGridView未显示表C#,c#,sql-server,C#,Sql Server,我的数据网格视图未显示数据。我希望它在运行时显示整个表,并提供一个搜索选项来搜索特定行 SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\DELL\source\repos\phoneBookwin\phoneBookwin\Database1.mdf;Integrated Security=True"); con.Open(

我的数据网格视图未显示数据。我希望它在运行时显示整个表,并提供一个搜索选项来搜索特定行

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\DELL\source\repos\phoneBookwin\phoneBookwin\Database1.mdf;Integrated Security=True");
con.Open();

using (SqlCommand com = new SqlCommand("select * from Contacts"))
{
    using (SqlDataAdapter db = new SqlDataAdapter("select * from Contacts", con))
    {
        DataTable View = new DataTable();
        db.Fill(View);
    }
}
这是用来搜索特定联系人的

private void search_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\DELL\source\repos\phoneBookwin\phoneBookwin\Database1.mdf;Integrated Security=True");
    con.Open();
    SqlDataAdapter cmd = new SqlDataAdapter("Select * from Contacts where Name = '"+searchBox.Text+"'",con);
    DataTable View = new DataTable();
    cmd.Fill(View);
    con.Close();
}

无论我是否单击搜索按钮,data gridview都不会显示任何内容。

您的代码从不将您填写的结果数据表分配给datagridview;它只是填满它然后扔掉。调用
Fill

如果执行此操作后datagridview仍然为空,则可能没有数据下载到datatable。检查您是否连接到正确的数据库,以及该表是否包含数据。如果没有看到预期的列,请检查datagridview的AutoGenerateColumns设置是否为true

请回答其他问题

  • …停止以您当前的方式编写SQL,将文本框中的值串联在一起-这不仅会导致有人搜索O'Connor的名字,而且会使您面临数据库软件最常见的黑客攻击形式的风险。阅读-您的代码应该更像:
  • …熟悉C#命名约定<代码>视图应被称为
    视图
    ,因为它是本地成员,而不是可公开访问的类级属性

您的代码从不将填充的结果数据表分配给datagridview;它只是填满它然后扔掉。调用
Fill

如果执行此操作后datagridview仍然为空,则可能没有数据下载到datatable。检查您是否连接到正确的数据库,以及该表是否包含数据。如果没有看到预期的列,请检查datagridview的AutoGenerateColumns设置是否为true

请回答其他问题

  • …停止以您当前的方式编写SQL,将文本框中的值串联在一起-这不仅会导致有人搜索O'Connor的名字,而且会使您面临数据库软件最常见的黑客攻击形式的风险。阅读-您的代码应该更像:
  • …熟悉C#命名约定<代码>视图应被称为
    视图
    ,因为它是本地成员,而不是可公开访问的类级属性

    • 您的示例存在许多问题,主要问题是您尚未将表格作为源分配给Calus Jard提到的网格


      此外,将用户输入连接到SQL查询中的查询非常危险,我建议您使用一个参数。您的示例中存在许多问题。主要问题是您尚未将表作为源分配给Calus Jard提到的网格

      此外,将用户输入连接到SQL查询中的查询非常危险,我建议使用参数

          using(var da = new SqlAdapter("SELECT * FROM t WHERE c LIKE @p") {
            da.SelectCommand.Parameters.Add("@p", SqlDbType.VarChar, 4000).Value = textbox.Text;
            //fill etc
          }