0

私は3列のテーブルを持っています。viz id,profile_id,plugin_id単一のプロファイルに関連付けられた複数のプラグインが存在する可能性があります。同じクエリを適用しようとしたときに、ログイン ページで定義されたセッション変数に由来する profile_id に関連付けられたすべてのプラグインをデータベースから取得するにはどうすればよいですか?最後のレコードの plugin_id を持つデータを返します。クエリは次のとおりです。

SqlCommand cmd1 = new SqlCommand(
   "select plugin_id from profiles_plugins where profile_id=" +
    Convert.ToInt32(Session["cod"]), con);

    SqlDataReader dr1 = cmd1.ExecuteReader();
    if (dr1.HasRows)
    {
        while (dr1.Read())
        {
            Session["edp1"] = Convert.ToInt32(dr1[0]);
        }
    }
    dr1.Close();
    cmd1.Dispose();
4

3 に答える 3

0

セッション内のすべての値を保存したいと思います。その方法は次のとおりです。

SqlCommand cmd1 = new SqlCommand("select plugin_id from profiles_plugins where id=(select id from profiles_plugins where profile_id=" + Convert.ToInt32(Session["cod"]) + ")", con);

SqlDataReader dr1 = cmd1.ExecuteReader();
var yourList = new List<int>();
if (dr1.HasRows)
{
    while (dr1.Read())
    {
       yourList.Add(Convert.ToInt32(dr1[0]));

    }
}
Session["edp1"] = yourList;
dr1.Close();
cmd1.Dispose();

そして、あなたがセッションから読むとき、あなたはただタイプします:

var yourList = (List<int>)Session["edp1"];

ただし、実際にはコードをリファクタリングする必要があります。コードは、データアクセスとセッション処理を同じ場所で管理するべきではありません。

于 2011-01-09T13:28:06.623 に答える
0

whileループ中に毎回同じ変数に割り当てるため、「エラー」が発生します。これが、最後の行のみを取得するように見える理由です!

于 2011-01-09T09:55:17.970 に答える
0

データベースから値を取得するための別の関数を作成することをお勧めします。また、SQL インジェクションを避けるために、パラメータ化されたクエリを使用する必要があります。

public IEnumerable<int> GetPluginIds(int profileId)
{
    using (var connection = new SqlConnection("SOME CONNECTION STRING"))
    using (var cmd = connection.CreateCommand())
    {
        connection.Open();
        cmd.CommandText = "SELECT plugin_id FROM profiles_plugins WHERE profile_id = @profile_id";
        cmd.Parameters.AddWithValue("@profile_id", profileId);
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                yield return reader.GetInt32(0);
            }
        }
    }
}

次に、次のように関数を呼び出します。

// get the profile_id from session
int profileId = Convert.ToInt32(Session["cod"]);

// fetch associated plugin ids
int[] pluginIds = GetPluginIds(profileId).ToArray();

// store the resulting array into session
Session["pluginIds"] = pluginIds;
于 2011-01-09T09:57:12.863 に答える