0

クエリの実行後、取得する必要のある結果は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"]);
4

4 に答える 4

6

使用する

   String UserNames = reader.GetString(0); 

@leppie がそのコメントで指摘したように、フィールド名をインデクサーとして使用することもできます。
したがって、フィールドに名前が付けられていると仮定すると、次のusersように書くこともできます。

  String UserNames = reader["users"].ToString(); 
于 2012-06-11T10:38:00.530 に答える
4

あなたがやりたいことは確かです:

String UserNames = reader["users"] as string;
于 2012-06-11T10:38:01.403 に答える
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);
    }
}

不明な数のレコードを繰り返す前に、読者に序数を尋ねていることに注意してください。これには次の 2 つの理由があります。

  1. 序数を一度キャッシュして何度も使用すると、パフォーマンスが向上します。
  2. 序数をハードコードしていないので、誰かがストアド プロシージャ/スクリプトで結果セットの列の位置を変更したとしても、私のコードは引き続き機能します。
于 2012-06-11T10:41:35.923 に答える
3
String UserNames;
if(reader["users"]!=null)     
UserNames = (string)reader["users"];//or reader["users"].ToString();
于 2012-06-11T10:41:14.940 に答える