0

指定されたテーブルからすべてのデータを取得する必要があり、データを厳密に型指定する必要がないため、データ テーブルとして返します。

public DataTable GetByTypeName(String t)
    {
        var type = Type.GetType(t);

        var dt = new DataTable();

        using (var sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MasterPlanConnectionString"].ConnectionString))
        {
            var sqlComm = new SqlCommand("SELECT * FROM @table", sqlConn);
            sqlComm.Parameters.AddWithValue("@table", type.Name);

            sqlConn.Open();

            var dr = sqlComm.ExecuteReader(CommandBehavior.CloseConnection);

            dt.Load(dr);
        }

        return dt;
    }

これを実行すると、エラーが発生します

System.Data.SqlClient.SqlException was unhandled by user code
Message=Must declare the table variable "@table".

@table を宣言したため、これが機能しない理由がわかりません。このメソッドはいくつかの悪い sql 攻撃にさらされていることを知っているので、正確にどの型に対してクエリを実行できるかについて、いくつかの保護を追加する予定です。

4

1 に答える 1

3

クエリを動的に作成できます-(ここでは問題ありませんが、クエリが SQL インジェクションにさらされる可能性があります)

        var query = String.Fromat("Select * from [{0}]", type.Name);
        var sqlComm = new SqlCommand(query, sqlConn);
        /*sqlComm.Parameters.AddWithValue("@table", type.Name);*/
于 2011-05-13T02:43:15.437 に答える