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

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

ここでは、空のデータグリッドビューが表示されます

EDIT 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 インジェクションに対してオープンであるため、十分に注意してください。テーブル名がユーザー入力に由来しないことを願っています

于 2013-06-06T09:20:26.383 に答える