c# Lesen Sie Daten von SqlDataReader



5 Answers

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

oder

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

Dies sind object s, also müssen Sie sie entweder oder .ToString () umsetzen.

c# asp.net sql-server-2008 sqldatareader

Ich habe eine SQL Server 2008-Datenbank und arbeite daran im Backend. Ich arbeite an asp.net/C #

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

Ich weiß, dass der Leser Werte hat. Mein SQL-Befehl soll nur 1 Spalte aus einer Tabelle auswählen. Die Spalte enthält NUR Zeichenketten. Ich möchte die Strings (Zeilen) im Reader nacheinander lesen. Wie mache ich das?




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

es wird funktionieren




Dachte, um meine Hilfsmethode für diejenigen zu teilen, die es verwenden können:

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);
                }
            }
        }
    }
}

Verwendung:

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"));
    }
}

Die Hilfsmethode konvertiert einen beliebigen Wert. Wenn sie nicht umgesetzt werden kann oder der Datenbankwert NULL ist, ist das Ergebnis null.




Im einfachsten Fall, wenn Ihre Abfrage column_name zurückgibt und eine Zeichenfolge enthält:

while (rdr.Read())
{
    string yourString = rdr.getString("column_name")
}



Ich weiß, dass das etwas alt ist, aber wenn Sie den Inhalt eines SqlDataReader in einer Klasse lesen, dann wird dies sehr praktisch sein. Die Spaltennamen von Leser und Klasse sollten gleich sein

public static List<T> Fill<T>(this SqlDataReader reader) where T : new()
        {
            List<T> res = new List<T>();
            while (reader.Read())
            {
                T t = new T();
                for (int inc = 0; inc < reader.FieldCount; inc++)
                {
                    Type type = t.GetType();
                    string name = reader.GetName(inc);
                    PropertyInfo prop = type.GetProperty(name);
                    if (prop != null)
                    {
                        if (name == prop.Name)
                        {
                            var value = reader.GetValue(inc);
                            if (value != DBNull.Value)
                            { 
                                prop.SetValue(t, Convert.ChangeType(value, prop.PropertyType), null);
                            }
                            //prop.SetValue(t, value, null);

                        }
                    }
                }
                res.Add(t);
            }
            reader.Close();

            return res;
        }



Related