viz id,profile_id,plugin_id
。现在可以有超过1个插件与单个配置文件相关联如何从数据库中获取与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();
答案 0 :(得分:0)
有一个“错误”,因为你在while循环期间每次都分配给同一个变量,这就是为什么看起来你只得到最后一行!
答案 1 :(得分: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;
答案 2 :(得分: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"];
但是你应该重构你的代码,代码不应该在同一个地方管理数据访问和会话处理。