从SQL Server数据库填充DataTable

时间:2013-06-06 09:15:01

标签: c# sql sql-server datatable

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

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的数据网格视图中显示此表,这是问题所在 displaying multiple datatable in tabcontrol C#

这里只显示一个空白的datagridview

编辑2
尝试了所有这些,当我尝试显示表时,datagridview为空,具有正确的行数但现在为值

2 个答案:

答案 0 :(得分:29)

如果变量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是开放的。我希望你的表名不是来自用户输入

答案 1 :(得分: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;
    }

希望有用。