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

时间:2018-04-20 10:02:42

标签: c# sql-server

我尝试做的是检索用户名与用户对应的FullName值,这确实有用,问题是当我有更多内容时,我不知道如何存储值我尝试使用一个数组而不是一个值,但是当有两个值时,检索它时,characterReader[0]将为空,characterReader[1]将只有第一个检索到的值,但是如果只有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.

3 个答案:

答案 0 :(得分:2)

您可以使用List<>而不是将值存储在数组中。这可能会对您有所帮助:

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());                
            }
        }

答案 1 :(得分:0)

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

当&#34;读&#34;完成后,读者将移动到指向下一行,以便您可以通过这种方式访问​​所有列。 reader [0]将是第一列,reader [1]代表第二列,依此类推,在您的示例中,您只有一列fullname。

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

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

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

注意:由于@steve指向,参数不起作用,删除string.format调用并使用参数名称。

new SqlCommand("SELECT FullName FROM [Characters] WHERE Username=@checkPlayerName"), con);

答案 2 :(得分:0)

这是微软的一个非常好的链接:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/retrieving-data-using-a-datareader

使用GetString(columnNumber)方法从行中获取整个值。这应该会让你轻松。

希望这有帮助。