检索数据库结果并将其分配给C#中的字符串

时间:2016-02-22 23:19:03

标签: c# mysql asp.net sql-server asp.net-mvc-5

我的sql server上有下表。

表名 - 用户信息

Name    Company_id    Task1   Task2    Task3  
Anna     123           TRUE   TRUE     FALSE
Neeva    456           FALSE  TRUE     FALSE

我需要知道用户task1,task2和task3状态。例如安娜对Task1和Task2都是如此。所以我需要低于输出。

Annas详细信息为字符串 - > (task1,task2) 同样对于neeva - > (任务2)

现在使用这个SQL查询,

SELECT case WHEN ( SUBSTRING (value, LEN(value), 1) = ',') THEN
SUBSTRING (value, 1, (LEN(value) -1) )
ELSE
value END from (
select 
(CASE WHEN Task1 = 1 THEN 'Task1,' ELSE ''END) + 

(CASE WHEN Task2 = 1 THEN 'Task2,' ELSE ''END)  +  

(CASE WHEN Task3 = 1 THEN 'Task3,' ELSE ''END) value

from userinfo tab

我在SQL中使用新列获得以下结果。

(No column name)
task1,task2
task1

我需要将此输出传递给C#,而不是使用我需要的输出创建新列。对于例如如果我想知道Anna的状态,我将查询数据库并首先检查用户Anna。完成后,我将检查状态。

所以在C#方面,我需要得到类似的东西

string userdetails = task1,task2 

只有在我查询用户anna时才会显示此详细信息。如何在c#中获得结果而不是在SQL列中显示结果,如上所示。

2 个答案:

答案 0 :(得分:2)

从数据库中检索特定用户的原始数据后,可以在c#中完成所有操作。这是一个如何解决您的问题的控制台应用程序:

创建一个POCO来保存用户信息

public class UserInfo
{
    public string Name { get; set; }
    public string CompanyId { get; set; }
    public bool Task1 { get; set; }
    public bool Task2 { get; set; }
    public bool Task3 { get; set; }
}

创建一个变量来保存测试数据

static List<UserInfo> _userInfo;

然后用水合变量的方法

private static void CreateMockData()
    {
        _userInfo = new List<UserInfo>();

        _userInfo.Add(new UserInfo { Name = "Anna", CompanyId = "123", Task1 = true, Task2 = true, Task3 = false });
        _userInfo.Add(new UserInfo { Name = "Neeva", CompanyId = "456", Task1 = false, Task2 = true, Task3 = false });
    }

重要的工作将在另一个方法中完成,该方法将检查对象的值并返回相应的字符串

private static string GetUserInfoByName(string name)
    {
        StringBuilder tasks = new StringBuilder();

        // THIS WOULD BE A CALL TO THE DB TO RETURN THE RAW VALUES FOR A USER
        var userInfo = _userInfo.Find(e => e.Name == name);

        // TEST FOR TASKS HAVING THE VALUE OF TRUE
        if(userInfo.Task1)
        {
            tasks.Append("Task1,");
        }

        if(userInfo.Task2)
        {
            tasks.Append("Task2,");
        }

        if(userInfo.Task3)
        {
            tasks.Append("Task3");
        }

        // CONVERT STRING BUILDER TO A STRING
        var result = tasks.ToString();

        // REMOVE THE LAST COMMA IF WE HAVE ONE
        if(result.EndsWith(","))
        {
            result = result.Remove(result.Length - 1);
        }

        return result;
    }

以下是将所有内容放在一起的主要方法

static void Main(string[] args)
    {
        // THIS DATA WOULD BE IN YOUR DATABASE
        CreateMockData();

        var userDetails = GetUserInfoByName("Anna");
        Console.WriteLine(userDetails);

        userDetails = GetUserInfoByName("Neeva");
        Console.WriteLine(userDetails);

        Console.ReadLine();
    }

输出

任务1,任务2

任务2

答案 1 :(得分:1)

不要进行字符串查询,因为它会使您的代码成为许多sql注入的目标,除非您实现了非常复杂的字符串转义。

使用C#时,您有多种选择。

结帐Entity FrameworkLinq2Sql

我个人更喜欢第二种,因为当您在接口上构建查询(有一些限制)时,由于缺少映射,EF无法编译,因此它更适合于非常模块化的需求。