从SqlDataReader读取数据

我有一个SQL Server 2008数据库,我在后端工作。 我正在研究asp.net/C#

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

我知道读者有价值。 我的SQL命令是从表中select一列。 该列只包含string。 我想逐一阅读阅读器中的string(行)。 我如何做到这一点?

 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()。

把从“数据库名”所在的数据库开始返回的列的名称。 如果是string,则可以使用.ToString() 。 如果是另一种types,则需要使用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()); } 

用最简单的话来说,如果你的查询返回了column_name并且它包含一个string:

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

其实,我自己想到我可以做到这一点:

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

以为分享我的帮手方法的人可以使用它:

 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,则结果将为空。

我有一个帮手function,如:

  public static string GetString(object o) { if (o == DBNull.Value) return ""; return o.ToString(); } 

然后我用它来提取string:

  tbUserName.Text = GetString(reader["UserName"]); 

我知道这是有点古老,但如果你正在读取一个SqlDataReader的内容到一个类,那么这将是非常方便的。 阅读器和类的列名应该相同

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