8

这对我来说是个谜,我知道我从别人那里得到的代码,在我的情况下,它返回的数据表是空的

conSTR是连接字符串,设置为全局字符串

public DataTable fillDataTable(string table)
    {
        string query = "SELECT * FROM dstut.dbo." +table;

        SqlConnection sqlConn = new SqlConnection(conSTR);
        sqlConn.Open();
        SqlCommand cmd = new SqlCommand(query, sqlConn);

        DataTable dt = new DataTable();
        dt.Load(cmd.ExecuteReader());
        sqlConn.Close();
        return dt;
    }

编辑 1
重点是稍后在 tabcontrol 上的 datagrid 视图中显示此表,这里是关于 在 tabcontrol C# 中显示多个数据表的问题

在这里它只是向我展示了一个空白的datagridview

编辑 2
都试过了,当我尝试显示表格时,datagridview 是空的,有适量的行,但现在值

4

2 回答 2

32

如果变量table包含无效字符(如空格),则应在变量周围添加方括号。

public DataTable fillDataTable(string table)
{
    string query = "SELECT * FROM dstut.dbo.[" + table + "]";

    using(SqlConnection sqlConn = new SqlConnection(conSTR))
    using(SqlCommand cmd = new SqlCommand(query, sqlConn))
    {
        sqlConn.Open();
        DataTable dt = new DataTable();
        dt.Load(cmd.ExecuteReader());
        return dt;
    }
}

顺便说一句,对这种代码要非常小心,因为它对 Sql Injection 是开放的。我希望你的表名不是来自用户输入

于 2013-06-06T09:20:26.383 回答
2

尝试以下操作:

public DataTable fillDataTable(string table)
    {
        string query = "SELECT * FROM dstut.dbo." +table;

        SqlConnection sqlConn = new SqlConnection(conSTR);
        sqlConn.Open();
        SqlCommand cmd = new SqlCommand(query, sqlConn);
        SqlDataAdapter da=new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        sqlConn.Close();
        return dt;
    }

希望它是有帮助的。

于 2013-06-06T09:19:14.267 回答