C# 从数据库中检索多个值并存储它们

C# 从数据库中检索多个值并存储它们,c#,sql-server,C#,Sql Server,我试图做的是检索用户名对应于用户的全名值,这确实有效,问题是当有多个值时,我不知道如何存储这些值,我尝试使用数组,但当有两个值时,检索时,characterReader[0]将为空,characterReader[1]将仅具有第一个检索到的值,但是如果只有一个值要检索,characterReader[0]将不再为空并显示正确的值 这是我的代码,我不确定这是否正确: SqlCommand displayCharactersCMD = new SqlCommand(String.Format("SE

我试图做的是检索用户名对应于用户的全名值,这确实有效,问题是当有多个值时,我不知道如何存储这些值,我尝试使用数组,但当有两个值时,检索时,
characterReader[0]
将为空,
characterReader[1]
将仅具有第一个检索到的值,但是如果只有一个值要检索,
characterReader[0]
将不再为空并显示正确的值

这是我的代码,我不确定这是否正确:

SqlCommand displayCharactersCMD = new SqlCommand(String.Format("SELECT FullName FROM [Characters] WHERE Username='{0}'", username), con);
displayCharactersCMD.Parameters.AddWithValue("@checkPlayerName", username);

using (SqlDataReader reader = displayCharactersCMD.ExecuteReader())
{
    int counter = 0;

    while (reader.Read())
    {
        if (counter != countCharsToVar)
        {
            characterReader = new string[countCharsToVar];
            characterReader[counter] = reader[0].ToString();
            counter++;
        }
        else
            break;
    }
}
要检索两个值时的示例:

API.consoleOutput("CHAR 1: " + characterReader[0]); - This will become null.
API.consoleOutput("CHAR 2: " + characterReader[1]); - This will contain the first value.
我打算如何工作:

API.consoleOutput("CHAR 1: " + characterReader[0]); - This will display first value.
API.consoleOutput("CHAR 2: " + characterReader[1]); - This will display second value.

您可以利用列表,而不是将值存储在数组中。这可能会帮助您:

SqlCommand displayCharactersCMD = new SqlCommand("SELECT FullName FROM [Characters] WHERE Username=@checkPlayerName");
displayCharactersCMD.Parameters.AddWithValue("@checkPlayerName", username);
var characterReader = new List<string>();
using (SqlDataReader reader = displayCharactersCMD.ExecuteReader())
        {                
            while (reader.Read())
            {
                characterReader.Add(reader[0].ToString());                
            }
        }
SqlCommand displayCharactersCMD=newsqlcommand(“从[Characters]中选择全名,其中Username=@checkPlayerName”);
displayCharactersCMD.Parameters.AddWithValue(“@checkPlayerName”,用户名);
var characterReader=新列表();
使用(SqlDataReader=displayCharactersCMD.ExecuteReader())
{                
while(reader.Read())
{
characterReader.Add(读取器[0].ToString());
}
}

您可以利用列表,而不是将值存储在数组中。这可能会帮助您:

SqlCommand displayCharactersCMD = new SqlCommand("SELECT FullName FROM [Characters] WHERE Username=@checkPlayerName");
displayCharactersCMD.Parameters.AddWithValue("@checkPlayerName", username);
var characterReader = new List<string>();
using (SqlDataReader reader = displayCharactersCMD.ExecuteReader())
        {                
            while (reader.Read())
            {
                characterReader.Add(reader[0].ToString());                
            }
        }
SqlCommand displayCharactersCMD=newsqlcommand(“从[Characters]中选择全名,其中Username=@checkPlayerName”);
displayCharactersCMD.Parameters.AddWithValue(“@checkPlayerName”,用户名);
var characterReader=新列表();
使用(SqlDataReader=displayCharactersCMD.ExecuteReader())
{                
while(reader.Read())
{
characterReader.Add(读取器[0].ToString());
}
}

您需要对每个值迭代
SqlDataReader
,调用reader.Read()使读取器指向下一行,当它到达末尾并且结果集中没有更多行时,它返回false

当“读取”完成时,读取器被移动到指向下一行,这样您就可以通过这种方式访问所有列。读卡器[0]将是第一列,读卡器[1]将是第二列,依此类推,在您的示例中,您只有一列全名

您可以通过以下方式将所有结果添加到列表中:

var values = new List<string>();
using (SqlDataReader reader = displayCharactersCMD.ExecuteReader())
{

    while (reader.Read())
    {
        values.Add(reader[0]);
    }
}

您需要为每个值迭代
SqlDataReader
,调用reader.Read()使读取器指向下一行,当它到达末尾并且结果集中没有更多行时,它返回false

当“读取”完成时,读取器被移动到指向下一行,这样您就可以通过这种方式访问所有列。读卡器[0]将是第一列,读卡器[1]将是第二列,依此类推,在您的示例中,您只有一列全名

您可以通过以下方式将所有结果添加到列表中:

var values = new List<string>();
using (SqlDataReader reader = displayCharactersCMD.ExecuteReader())
{

    while (reader.Read())
    {
        values.Add(reader[0]);
    }
}

这里有一个来自Microsoft的非常好的链接:

使用GetString(columnNumber)方法从行中获取整个值。那对你来说应该很容易


希望这有帮助。

这里有一个来自Microsoft的非常好的链接:

使用GetString(columnNumber)方法从行中获取整个值。那对你来说应该很容易


希望这有帮助。

参数不是这样工作的。您仍在创建字符串连接的sql命令。参数不能以这种方式工作。您仍在创建一个字符串连接sql命令。使用列表为我做到了这一点,非常感谢。使用列表为我做到了这一点,非常感谢。