执行查询后,我需要采取的结果是UserNames部分。
我遇到错误:无法将带有[]的索引应用于“方法组”类型的表达式
public class ProcessInput
{
string connectionString = (string)ConfigurationSettings.AppSettings["myConString"];
private string msg_arr;
string username = null;
private void MooseSeenInput(string MobileNo, string Date, string odd, params Array[] msg_arr)
{
SqlConnection conn = new SqlConnection(myConString);
conn.Open();
SqlCommand com = new SqlCommand("SELECT * FROM Users as users WHERE UserName=@UserName AND State!='1' AND State!='4'", conn);
com.Parameters.AddWithValue("@UserName", UserName);
// com.ExecuteNonQuery();
using (SqlDataReader reader = com.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
String UserNames = (reader.Read["users"]);
}
}
}
}
}
行发生错误:
String UserNames = (reader.Read["users"]);
答案 0 :(得分:5)
使用
String UserNames = reader.GetString(0);
正如@leppie在评论中指出的那样,你也可以使用字段名称作为索引器
因此,假设该字段名为users
,您也可以写下:
String UserNames = reader["users"].ToString();
答案 1 :(得分:4)
很确定你只想做:
String UserNames = reader["users"] as string;
答案 2 :(得分:4)
当您尝试将索引语法应用于方法调用时,您的错误是编译器错误,在C#中涉及括号。
SqlDataReader
确实公开了一个索引器,但它在读者本身,而不是方法成员:
string username = (string)reader["users"];
这就是我倾向于设计此代码的方式:
using (SqlDataReader reader = com.ExecuteReader())
{
int userOrd = reader.GetOrdinal("users");
while (reader.Read())
{
string username = reader.GetString(userOrd);
}
}
请注意,在迭代未知数量的记录之前,我会询问读者序号。这有两个原因:
答案 3 :(得分:3)
String UserNames;
if(reader["users"]!=null)
UserNames = (string)reader["users"];//or reader["users"].ToString();