c# - 在c#中启用多用户管理

标签 c# mysql asp.net gridview

在表 users 中,每个用户的 MySql 数据库可以用不同的颜色存储,例如:

Users       colors
Foo         green
Pluto       yellow
Foo         red

当用户通过身份验证时,我需要知道与登录用户关联的颜色是什么。

我使用 List 方法以这种方式为每个用户附加变量颜色:

List<string> colorList = new List<string>();

....

if (reader.HasRows)
{
    while (reader.Read())
    {
        Colors = reader["Colors"].ToString();
        colorList.Add(Colors.ToString());
    }

        ns = string.Join(", ", colorList.ToArray());
}

这里一切正常。

现在我需要在 GridView 中发布存储在 Experience 表 中的所有行,其中存储了所有用户对每种颜色的评论。

例如,在用户 Foo 的情况下,我需要在 GridView 中发布所有存储在 Experience 表 中的评论,说到 colors红色和绿色

但我不能发布这个 GridView 因为如果用户是 Foo 我只会看到关于 红色 的评论而没有评论绿色

用循环思考我有这个输出:

SELECT * FROM Experience WHERE Colors IN ('red');

SELECT * FROM Experience WHERE Colors IN ('green');

下面是我的代码。

有人知道我该如何解决吗?

你能推荐一下吗?

你能帮帮我吗?

提前谢谢你。

private DataSet RetrieveColors()
    {
        str = null;
        strArr = null;
        count = 0;

        str = ns == null ? "" : ns.ToString();
        char[] splitchar = { ',' };

        if (!string.IsNullOrEmpty(str))
        {
            strArr = str.Split(splitchar);
        }
        else
        {
            strArr = null;
        }

        for (count = 0; count <= strArr.Length - 1; count++)
        {
                sql = @" SELECT * FROM Experience WHERE Colors IN (?); ";
        }


        DataSet dsColors = new DataSet();

        using (OdbcConnection cn =
          new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
        {
            cn.Open();

            using (OdbcCommand cmd = new OdbcCommand(sql, cn))
            {
                for (count = 0; count <= strArr.Length - 1; count++)
                {
                    cmd.Parameters.AddWithValue("param1", Server.UrlDecode(strArr[count].Trim()));
                }

                OdbcDataAdapter adapter = new OdbcDataAdapter(cmd);
                adapter.Fill(dsColors);
            }
        }

        return dsColors;
    }

编辑#1

Users       colors
Foo         green
Pluto       yellow
Foo         red

最佳答案

试试这段代码:

sql = @" SELECT * FROM Experience WHERE Colors IN (?";

for (count = 1; count <= strArr.Length - 1; count++)
        {
                sql += ",?"; // add more placeholders as needed
        }
sql+=");"

关于c# - 在c#中启用多用户管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804394/

相关文章:

MySQL如何将值的平均值放入特定范围

c# - ASP.NET c# 如果选中复选框,则仅验证表单的一部分

c# - ASP.NET global.asax end_session( session 永远不会结束)

c# - (Unity3D) 获取网格系统来检测大于一个图 block 的游戏对象

c# - 在基类上使用虚拟异步方法可以吗?

c# - 用正则表达式替换部分单词

asp.net - 防止机器人向您的博客发送垃圾邮件的最佳方法是什么?

c# - 暂停和恢复 Parallel.ForEach

mysql - 如何获取可由给定字母组成的所有单词?

php - 将 2 个 SQL 表连接成 1 个数据数组