突然忘记了,如果我要输出SqlDataReader某一行某一列的数据,正确的应该如何写?

时间:2022-10-27 10:31:27
//数据层Db基类Base:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace Db
{
/// <summary>
/// Base 的摘要说明。
/// </summary>
public class Base
{
public Base()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

protected static SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["dsn"]);
protected static SqlDataReader dr;
protected static string strSp;

protected static SqlDataReader SelectAll(string strSp)
{
SqlCommand cmd = new SqlCommand(strSp,conn);
cmd.CommandType = CommandType.StoredProcedure;

conn.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
}
}
=======================================================================〉
//数据层Db类StyleCSS继承基类进行数据读取操作,并返回SqlDataReader()
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace Db
{
/// <summary>
/// StyleCSS 的摘要说明。
/// </summary>
public class StyleCSS:Base
{
public StyleCSS()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public SqlDataReader GetAll()
{
strSp = "Sp_BBS_stycss_SelectAll";
SelectAll(strSp);
return dr;
}
}
}
========================================================================〉
//设计层输出SqlDataReader的值
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using Db;

namespace WebApplicationBBS
{
/// <summary>
/// Reg 的摘要说明。
/// </summary>
public class Reg : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
Db.StyleCSS MyStyleCSS = new StyleCSS();
SqlDataReader dr = MyStyleCSS.GetAll();
while(dr.Read())
{
Response.Write(dr.GetString(4));
}
}
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}

5 个解决方案

#1


if you want to use obj[m][n], don't use Reader, use DataSet/DataTable instead, and DataTable1.Rows[m][n]

if you insist, note, DataReader is forward-only read-only stream, then you can do something like

int ROW = ...;
int m = 0;
while (m < ROW && reader.Read())
  m++;

if (m == ROW && read.Read())
{
   //do something here 
}

#2


while (reader.Read()){
   //
}

#3


mark

#4


1fen!!!

#5


int ROW = ...;
问题就在于怎样直接获得SqlDataReader的行数呢?这个好像也不能直接获得。
不会还要我再写一个遍历数据表的代码吧?
看来要获得某行某列的值用SqlDataReader真的很不方便,我还是使用DataView对象算了。

#1


if you want to use obj[m][n], don't use Reader, use DataSet/DataTable instead, and DataTable1.Rows[m][n]

if you insist, note, DataReader is forward-only read-only stream, then you can do something like

int ROW = ...;
int m = 0;
while (m < ROW && reader.Read())
  m++;

if (m == ROW && read.Read())
{
   //do something here 
}

#2


while (reader.Read()){
   //
}

#3


mark

#4


1fen!!!

#5


int ROW = ...;
问题就在于怎样直接获得SqlDataReader的行数呢?这个好像也不能直接获得。
不会还要我再写一个遍历数据表的代码吧?
看来要获得某行某列的值用SqlDataReader真的很不方便,我还是使用DataView对象算了。