最近在做毕业设计时遇到了一些问题,希望大家能够帮我解决。我是按照.NET PetShop 4.0的结构设计了一个系统,但是在数据接口层遇到了一些问题,主要在用SqlDataReader读取数据时总是出错。具体情况如下:
DAL.Posts
[已解决]关于SqlDataReader的一个问题public IList<PostInfo> GetThreads(int forumID)
[已解决]关于SqlDataReader的一个问题[已解决]关于SqlDataReader的一个问题        
[已解决]关于SqlDataReader的一个问题{
[已解决]关于SqlDataReader的一个问题            
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString))
[已解决]关于SqlDataReader的一个问题[已解决]关于SqlDataReader的一个问题            
[已解决]关于SqlDataReader的一个问题{
[已解决]关于SqlDataReader的一个问题                
using (SqlCommand command = new SqlCommand("GetThreads", connection))
[已解决]关于SqlDataReader的一个问题[已解决]关于SqlDataReader的一个问题                
[已解决]关于SqlDataReader的一个问题{
[已解决]关于SqlDataReader的一个问题                    command.CommandType 
= CommandType.StoredProcedure;
[已解决]关于SqlDataReader的一个问题                    command.Parameters.Add(
new SqlParameter("@forumID", forumID));
[已解决]关于SqlDataReader的一个问题                    connection.Open();
[已解决]关于SqlDataReader的一个问题                    IList
<PostInfo> posts = new List<PostInfo>();
[已解决]关于SqlDataReader的一个问题                    
using (SqlDataReader rdr = command.ExecuteReader())
[已解决]关于SqlDataReader的一个问题[已解决]关于SqlDataReader的一个问题                    
[已解决]关于SqlDataReader的一个问题{
[已解决]关于SqlDataReader的一个问题                        
while (rdr.Read())
[已解决]关于SqlDataReader的一个问题[已解决]关于SqlDataReader的一个问题                        
[已解决]关于SqlDataReader的一个问题{
[已解决]关于SqlDataReader的一个问题                            
int i = rdr.FieldCount;
[已解决]关于SqlDataReader的一个问题                            PostInfo post 
= new PostInfo(rdr.GetInt32(0),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetDateTime(
1),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetString(
2),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetString(
3),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetInt32(
4),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetString(
5),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetInt32(
6),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetString(
7),
[已解决]关于SqlDataReader的一个问题                                                       
null,
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetBoolean(
9),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetBoolean(
10),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetInt32(
11),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetInt32(
12),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetDateTime(
13),
[已解决]关于SqlDataReader的一个问题                                                       rdr.GetString(
14));
[已解决]关于SqlDataReader的一个问题                            posts.Add(post);
[已解决]关于SqlDataReader的一个问题                        }

[已解决]关于SqlDataReader的一个问题                    }

[已解决]关于SqlDataReader的一个问题                    
return posts;
[已解决]关于SqlDataReader的一个问题                }

[已解决]关于SqlDataReader的一个问题            }

[已解决]关于SqlDataReader的一个问题}
在这里数据表的结构就不详细介绍了,其中用到的存储过程"GetThreads"为:
[已解决]关于SqlDataReader的一个问题ALTER PROCEDURE GetThreads
[已解决]关于SqlDataReader的一个问题    @forumID  
int
[已解决]关于SqlDataReader的一个问题
[已解决]关于SqlDataReader的一个问题AS
[已解决]关于SqlDataReader的一个问题
[已解决]关于SqlDataReader的一个问题SELECT Posts.PostID, Posts.AddedDate, Posts.AddedBy, Posts.AddedByIP, Posts.ForumID, Posts.ParentPostID, Posts.Title, Posts.Approved, Posts.Closed, Posts.ViewCount, Posts.ReplyCount, Posts.LastPostDate, Posts.LastPostBy
[已解决]关于SqlDataReader的一个问题FROM Posts INNER JOIN Forums 
[已解决]关于SqlDataReader的一个问题ON Posts.ForumID 
= Forums.ForumID
[已解决]关于SqlDataReader的一个问题WHERE Posts.ForumID 
= @forumID AND Posts.ParentPostID = 0 AND Posts.Approved = 1
[已解决]关于SqlDataReader的一个问题RETURN
前台页面BrowseThreads.aspx为:
[已解决]关于SqlDataReader的一个问题<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="BrowseThreads.aspx.cs" Inherits="Web.BrowseThreads"  Title="Browse Threads"%>
[已解决]关于SqlDataReader的一个问题
[已解决]关于SqlDataReader的一个问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
[已解决]关于SqlDataReader的一个问题
[已解决]关于SqlDataReader的一个问题
<html xmlns="http://www.w3.org/1999/xhtml" >
[已解决]关于SqlDataReader的一个问题
<head runat="server">
[已解决]关于SqlDataReader的一个问题
</head>
[已解决]关于SqlDataReader的一个问题
<body>
[已解决]关于SqlDataReader的一个问题    
<form id="form1" runat="server">
[已解决]关于SqlDataReader的一个问题    
<div>
[已解决]关于SqlDataReader的一个问题    
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetThreads"
[已解决]关于SqlDataReader的一个问题            TypeName
="RFID.BLL.Post">
[已解决]关于SqlDataReader的一个问题            
<SelectParameters>
[已解决]关于SqlDataReader的一个问题                
<asp:QueryStringParameter Name="forumID" QueryStringField="ForumID" Type="Int32" />
[已解决]关于SqlDataReader的一个问题            
</SelectParameters>
[已解决]关于SqlDataReader的一个问题        
</asp:ObjectDataSource>
[已解决]关于SqlDataReader的一个问题    
[已解决]关于SqlDataReader的一个问题    
</div>
[已解决]关于SqlDataReader的一个问题        
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1">
[已解决]关于SqlDataReader的一个问题            
<Columns>
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="ViewCount" HeaderText="ViewCount" SortExpression="ViewCount" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="ForumTitle" HeaderText="ForumTitle" SortExpression="ForumTitle" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="PostID" HeaderText="PostID" SortExpression="PostID" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="LastPostDate" HeaderText="LastPostDate" SortExpression="LastPostDate" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="AddedDate" HeaderText="AddedDate" SortExpression="AddedDate" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="Body" HeaderText="Body" SortExpression="Body" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="LastPostBy" HeaderText="LastPostBy" SortExpression="LastPostBy" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="AddedBy" HeaderText="AddedBy" SortExpression="AddedBy" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="ReplyCount" HeaderText="ReplyCount" SortExpression="ReplyCount" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="ForumId" HeaderText="ForumId" SortExpression="ForumId" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="AddedByIP" HeaderText="AddedByIP" SortExpression="AddedByIP" />
[已解决]关于SqlDataReader的一个问题                
<asp:CheckBoxField DataField="Approved" HeaderText="Approved" SortExpression="Approved" />
[已解决]关于SqlDataReader的一个问题                
<asp:BoundField DataField="ParentPostID" HeaderText="ParentPostID" SortExpression="ParentPostID" />
[已解决]关于SqlDataReader的一个问题                
<asp:CheckBoxField DataField="Closed" HeaderText="Closed" SortExpression="Closed" />
[已解决]关于SqlDataReader的一个问题            
</Columns>
[已解决]关于SqlDataReader的一个问题        
</asp:GridView>
[已解决]关于SqlDataReader的一个问题    
</form>
[已解决]关于SqlDataReader的一个问题
</body>
[已解决]关于SqlDataReader的一个问题
</html>
[已解决]关于SqlDataReader的一个问题
但是显示是却总是出错,如下图所示:
[已解决]关于SqlDataReader的一个问题
我先Google了一下问题,大部分说的都可能是由于SqlDataReader读出的数据项为空值,但是单独取某一项的值时却没有问题,比如说下面的语句是可以正确得到返回值的。这里当然要提到Posts表的主键PostID为Int类型的,并且为自动增值的(每次+1)。
[已解决]关于SqlDataReader的一个问题int i = rdr.GetInt32(0);

我换了很多方法来读取还是没有解决问题,希望大家能够帮我一起解决问题。

PS:问题已经解决了,原因是存储过程中的有个字段在迁移的时候遗漏了,导致读取时类型不匹配,但是郁闷的是编译器总是提示第一个字段有错误,真的搞了好久才解决,还好是解决了。^_^

转载于:https://www.cnblogs.com/hustyangli/archive/2007/02/25/656190.html

相关文章: