我在DB中有一个SQL表“角色”。我想知道用户是否有一个或多个角色(管理员/用户),然后在用户有2个角色的情况下使用值执行某些操作。
问题:我无法从数据库获取所有值,我只得到第一个。
我能用foreach循环吗?我没有在这里,但我正在寻找解决方案。
喜欢:
cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = @"SELECT Role "
+ " FROM UsersRole "
+ " WHERE UserName = @UserName ";
cmd.Parameters.Add(new SqlParameter("@UserName", username));
reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
if (reader["Role"] != DBNull.Value)
{
Role = Convert.ToString(reader["Role"]);
if(Role == UserRole.Admin.ToString())
{
IsAdmin = true;
}
if (Role == UserRole.User.ToString())
{
IsUser = true;
}
}
else
{
Role = "";
}
}
}
reader.Close();
是否可以使用C#代码访问DB中的表格,或者我可以做不同的事情?
谢谢并保重, Ragims
答案 0 :(得分:1)
有很多方法可以通过代码访问您的数据库,在这里的任何人可以对细节提供很多帮助之前,您需要选择其中一个。
DB Access方法的简短列表是:
1) ORM软件(实体框架,NHibernate等)这里有很多资源,我建议你在开始提问之前对它们进行谷歌研究(教程/演练)可以让你相当远)
2) Linq (具体是Linq-2-SQL)同样,有很多关于此的文档可以通过Google或MSDN网站获得。
3) ADO.NET 这是旧的做事方式(现在很大程度上不受欢迎,但它适用于非常简单的东西)。同样,存在大量资源。
一旦你选择了一项技术并完成了基础知识(你的具体问题确实应该被你能找到的任何教程所覆盖,我猜),回复一下有关具体问题的任何具体问题你'有。这里的人们应该能够在相当短的时间内解决你离开公园的任何问题。
答案 1 :(得分:0)
我认为您需要阅读ADO,LinqToSql或实体框架。所有这些技术都将允许访问SQL数据库。
编辑,因为您添加了更多信息:
不是一次循环使用每个记录,而是最好使用我认为的数据库。
以下是一些将按用户名分组的SQL,并返回具有多个角色的用户。 (注意,我的sql不是很好,可能是一个更好的方法来做到这一点)。更改数据库列以匹配表
select username, COUNT(id) from <yourtable> group by username having COUNT(id) > 1
答案 2 :(得分:0)
如果您正在使用“直接”ADO.NET(没有ORM,没有Linq-to-SQL或其他东西),那么您的代码必须看起来像这样:
// you pass in a UserID (numeric), you get back a list of roles that user has
public List<string> GetRolesForUser(int userID)
{
// SQL select statement - adjust as needed
string selectStmt = "SELECT Role FROM dbo.UserRole WHERE UserID = @YourUserID";
// create the resulting list of roles
List<string> _allRoles = new List<string>();
// define SqlConnection and SqlCommand to grab the data
using(SqlConnection _con = new SqlConnection('your connection string here'))
using(SqlCommand _cmd = new SqlCommand(selectStmt, _con))
{
// define the parameter for your SQL statement and fill the value
_cmd.Parameters.Add("@YourUserID", SqlDbType.Int);
_cmd.Parameters["@YourUserID"].Value = userID;
_con.Open();
// create SqlDataReader to grab the rows
using(SqlDataReader rdr = _cmd.ExecuteReader())
{
// loop over all rows returned by SqlDataReader
while(rdr.Read())
{
// grab the column no. 0 (corresponds to "Role" from your
// SQL select statement) as a string, and store it into list of roles
_allRoles.Add(rdr.GetString(0));
}
}
}
return _allRoles;
}