[C#] SqlDataReader에서 데이터 읽기

SQL Server 2008 데이터베이스가 있고 백엔드에서 작업 중입니다. asp.net/C#에서 일하고 있습니다.

SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
   //how do I read strings here????  
}  

독자에게는 가치가 있다는 것을 알고 있습니다. 내 SQL 명령은 테이블에서 하나의 열만 선택하는 것입니다. 열에는 문자열 만 포함됩니다. 독자의 문자열 (행)을 하나씩 읽고 싶습니다. 어떻게해야합니까?



답변

using(SqlDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        var myString = rdr.GetString(0); //The 0 stands for "the 0'th column", so the first column of the result.
        // Do somthing with this rows string, for example to put them in to a list
        listDeclaredElsewhere.Add(myString);
    }
}


답변

string col1Value = rdr["ColumnOneName"].ToString();

또는

string col1Value = rdr[0].ToString();

이것들은 object이므로 캐스트하거나 캐스트해야합니다 .ToString().


답변

데이터베이스에서 리턴 된 열 이름을 어디에 두십시오 "ColumnName". 문자열이면을 사용할 수 있습니다 .ToString(). 다른 유형 인 경우을 사용하여 변환해야합니다 System.Convert.

SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
    string column = rdr["ColumnName"].ToString();
    int columnValue = Convert.ToInt32(rdr["ColumnName"]);
}


답변

while(rdr.Read())
{
   string col=rdr["colName"].ToString();
}

그것은 일할 것이다


답변

단일 결과 :

if (reader.Read())
{
    Response.Write(reader[0].ToString());
    Response.Write(reader[1].ToString());
}

여러 결과의 경우 :

while (reader.Read())
{
    Response.Write(reader[0].ToString());
    Response.Write(reader[1].ToString());
}


답변

그것을 사용할 수있는 사람들을 위해 도우미 방법을 공유한다고 생각했습니다.

public static class Sql
{
    public static T Read<T>(DbDataReader DataReader, string FieldName)
    {
        int FieldIndex;
        try { FieldIndex = DataReader.GetOrdinal(FieldName); }
        catch { return default(T); }

        if (DataReader.IsDBNull(FieldIndex))
        {
            return default(T);
        }
        else
        {
            object readData = DataReader.GetValue(FieldIndex);
            if (readData is T)
            {
                return (T)readData;
            }
            else
            {
                try
                {
                    return (T)Convert.ChangeType(readData, typeof(T));
                }
                catch (InvalidCastException)
                {
                    return default(T);
                }
            }
        }
    }
}

용법:

cmd.CommandText = @"SELECT DISTINCT [SoftwareCode00], [MachineID]
                    FROM [CM_S01].[dbo].[INSTALLED_SOFTWARE_DATA]";
using (SqlDataReader data = cmd.ExecuteReader())
{
    while (data.Read())
    {
        usedBy.Add(
            Sql.Read<String>(data, "SoftwareCode00"),
            Sql.Read<Int32>(data, "MachineID"));
    }
}

도우미 메소드는 원하는 값으로 캐스트합니다. 캐스트 할 수 없거나 데이터베이스 값이 NULL이면 결과는 널입니다.


답변

실제로, 나는 이것을 할 수 있다고 스스로 알아 냈습니다.

while (rdr.read())
{
  string str = rdr.GetValue().ToString().Trim();
}