SqlDataReader的问题

发布时间: 2007-01-24 11:37    作者: 未知    来源: 未知    浏览:    评论

 

有个存储过程
ALTER PROCEDURE Pr_GetSingleStudent
(
    @StudentName varchar(50)
)
AS

SELECT
      StudentID
 
FROM
     Student

WHERE
      StudentName = @StudentName
执行之后查询是否有相同的用户名,有的话提示用户名该用户名已注册,没有的话正常注册
代码如下
StudentCtr student = new StudentCtr();
SqlDataReader dr=student.GetSingleStudent(TextBox_StudentName.Text.Trim());

if(Int32.ReferenceEquals(dr,null))
{
student.AddStudent(TextBox_StudentName.Text.Trim(),TextBox_Password.Text.Trim(),Int32.Parse(Session["TeacherID"].ToString()));

每次输入都说该用户名已注册,不论输入的是数据库中有的还是没有的

其实这个错误犯的是习惯性,应为一般比如象datagrid和listbox数据绑定的时候,就直接指定数据源,然后DataBind()就可以了,以为SqlDataReader 是连接数据库以后,读取了数据的,所以就拿来直接比较,后来经过查找资料及向别人请教,得知了SqlDataReader只是提供了一个数据的只读的指向,所以一般的一些LABEL或者TextBox的text的属性赋值的时候,都要先 SqlDataReader  Read()后,再赋值。

上面程序最后更改为

if (dr.Read())
{
    //已注册
}

还有就是在 Visual C# .NET 中 DataReader 没有 RecordCount 属性,就是没有提供给我们统计记录总数,要靠我们自己来实现,下面是微软的例子

String myConnString =
"User ID=sa;password=sa;Initial Catalog=pubs;Data Source=mySQLServer";

String mySelectQuery  = "SELECT * FROM Authors";
SqlConnection myConnection = new SqlConnection(myConnString);
SqlCommand myCommand = new SqlCommand(mySelectQuery, myConnection);
myConnection.Open();

SqlDataReader myReader ;
myReader = myCommand.ExecuteReader();
int RecordCount = 0;

try
    {
while (myReader.Read())
{
    RecordCount++;
}
if (RecordCount == 0)
MessageBox.Show("No data returned");
else
    MessageBox.Show("Number of Records returned:" + RecordCount);
    }
catch (Exception ex)
    {
MessageBox.Show(ex.ToString());
    }
finally
    {
myReader.Close();
myConnection.Close();
    }

这个例子可以简化,没有错误捕获和提示,代码如下

String myConnString =
"User ID=sa;password=sa;Initial Catalog=pubs;Data Source=mySQLServer";

String mySelectQuery  = "SELECT * FROM Authors";
SqlConnection myConnection = new SqlConnection(myConnString);
SqlCommand myCommand = new SqlCommand(mySelectQuery, myConnection);
myConnection.Open();

SqlDataReader myReader ;
myReader = myCommand.ExecuteReader();
int RecordCount = 0;

if(myReader.Read() )

{RecordCount ++;}

如果要是赋值给一个label的话,可以在上面加一句,Label1.Text=RecordCount ;


TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多