我尝试做的是检索用户名与用户对应的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.
答案 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)方法从行中获取整个值。这应该会让你轻松。
希望这有帮助。