C# 无法将带[]的索引应用于类型为';方法组';
在查询执行之后,我需要获取的结果是用户名部分 我收到一个错误:无法将[]索引应用于“方法组”类型的表达式C# 无法将带[]的索引应用于类型为';方法组';,c#,c#-4.0,C#,C# 4.0,在查询执行之后,我需要获取的结果是用户名部分 我收到一个错误:无法将[]索引应用于“方法组”类型的表达式 public class ProcessInput { string connectionString = (string)ConfigurationSettings.AppSettings["myConString"]; private string msg_arr; string username = null; private void MooseSe
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"]);
使用
正如@leppie在其评论中指出的,您也可以将字段名用作索引器因此,假设字段名为
users
,您也可以这样写:
String UserNames = reader["users"].ToString();
很确定你只想做:
String UserNames = reader["users"] as string;
当您试图将索引语法应用于方法调用时,您的错误是一个编译器错误,在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);
}
}
注意,在迭代未知数量的记录之前,我向读者询问序号。这有两个原因:
它确实提供了它。查看索引器。@Steve有几点,调用
ToString
可能会遇到空值或非字符串的内容,硬编码序数通常不是一个好主意。@Adamhuldsworth我同意,但我有一个疑问。我们可以插入一个!reader.IsDBNull(ordinalPos)
,但如果该字段包含DBNull.Value,则ToString()将转换为string.Empty,我不知道这是否是用户需要的。当我在用户后面加上点时,没有tostring@CoDeaDDictToString
和(string)val
不等效。当接收到一个值时,ToString
将为您提供一个字符串,即使SQL中的数据类型已更改。这可能是个问题。我倾向于从预期的数据类型强制转换,因此如果它们发生更改,代码将失败,更改将变得可见。+1用于获取序号,而不是硬编码。我认为这一点会从你的生活中受益answer@DaveBish我的一个抱怨是,如果列不是字符串,这将产生一个无提示的null(因为as
不会导致无效的强制转换异常)。我想你需要问如果它是null,或者不是字符串,它应该返回什么。我认为这是非常具体的实现。
string username = (string)reader["users"];
using (SqlDataReader reader = com.ExecuteReader())
{
int userOrd = reader.GetOrdinal("users");
while (reader.Read())
{
string username = reader.GetString(userOrd);
}
}