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