web-dev-qa-db-ja.com

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;
    }

EDIT 1
全体のポイントは、後でタブコントロールのデータグリッドビューでこのテーブルを表示することです。ここでの質問です tabcontrol C#で複数のデータテーブルを表示

ここでは、空のデータグリッドビューを表示しています

EDIT 2
すべてを試してみました。テーブルを表示しようとすると、datagridviewは空で、適切な行数がありますが、現在は値です

7
iakovl2

変数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インジェクションに対して開かれているため、この種のコードには非常に注意してください。テーブル名がユーザー入力に由来しないことを願っています

29
Steve

以下を試してください:

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;
    }

HopeIts参考になった。

2
Freelancer