SqlDataReader 读取方法不起作用

Posted

技术标签:

【中文标题】SqlDataReader 读取方法不起作用【英文标题】:SqlDataReader Read method not working 【发布时间】:2013-06-24 19:34:46 【问题描述】:

我正在尝试从数据库中检索列值,这是我的代码

protected void LoadProfile()

        conn = new SqlConnection(connString);

        cmdProfile = new SqlCommand("SELECT Name, Father, Gender, UserName, City, Country, Department, Year, Degree, JobTittle, Organization, JobCity, JobCountry, JobTittle FROM UserProfile WHERE UserName=@UserName", conn);

        cmdProfile.Parameters.AddWithValue("@UserName", userName);

        conn.Open();

        reader = cmdProfile.ExecuteReader();

        if (reader.Read())
        
            labelName.Text = reader["Name"].ToString();
            txtBoxFather.Text = reader["Father"].ToString();
            TextBoxGender.Text = reader["Gender"].ToString();
            TextBoxAge.Text = "";
            TextBoxCity.Text = reader["City"].ToString();
            TextBoxCountry.Text = reader["Country"].ToString();
            TextBoxDepartment.Text = reader["Department"].ToString();
            TextBoxDegree.Text = reader["Degree"].ToString();
            TextBoxYear.Text = reader["Year"].ToString();
            TextBoxJobTittle.Text = reader["JobTittle"].ToString();
            TextBoxJobCity.Text = reader["JobCity"].ToString();
            TextBoxJobCountry.Text = reader["JobCountry"].ToString();
            TextBoxOrganization.Text = reader["Organization"].ToString();
        

        conn.Close();
     

但它没有从数据库中检索任何内容。

实际上我正在使用此行将userName 参数作为来自不同页面的查询字符串

 userName = Request.QueryString["Name"].ToString();

当我设置断点时,该行之后控件不会继续前进

if (reader.Read())

这是我从中获取查询字符串的页面。 .

<asp:GridView ID="GridAllAlumni" runat="server" 
        onitemcommand="GridAllAlumni_ItemCommand">
   <Columns>
      <asp:TemplateField>
         <ItemTemplate>
            <asp:LinkButton ID="lnkname" runat="server"
                            Text='<%#Eval("Name") %>'
                            PostBackUrl='<%#"~/Profile/Profile.aspx?Name="+Eval("Name") %>'/>
         </ItemTemplate>
      </asp:TemplateField>
   </Columns>
</asp:GridView>

我哪里错了?

您的帮助将不胜感激。谢谢

【问题讨论】:

什么错误?发布堆栈跟踪/异常。 试试 if(reader.HasRows()) -> reader.Read() 直接在数据库服务器上执行查询是否有效?这可能仅仅是因为查询返回零行吗?可能是因为UserName=@UserName 检查的大小写敏感? userName 是您期望的吗? 顺便说一句,它不会停止它的工作,但是a:分离 UI 和数据访问,b:使用 using 将是一个非常好的主意积极地(所有conncmdProfilereader 都是IDisposable,并且应该使用using 块) 我认为你的最终目标还不清楚 【参考方案1】:

它是while(reader.Read()) 它没有循环播放。

【讨论】:

【参考方案2】:

试试这个。我基本上将查询中的@UserName更改为:UserName,并删除了cmdProfile.Parameters.AddWithValue("@UserName", userName);中的@。它对我有用。但是,我可能错了。所以,请随时纠正我。

protected void LoadProfile()

        conn = new SqlConnection(connString);

        cmdProfile = new SqlCommand("SELECT Name, Father, Gender, UserName, City, Country, Department, Year, Degree, JobTittle, Organization, JobCity, JobCountry, JobTittle FROM UserProfile WHERE UserName=:UserName", conn);

        cmdProfile.Parameters.AddWithValue("UserName", userName);

        conn.Open();

        reader = cmdProfile.ExecuteReader();

        if (reader.Read())
        
            labelName.Text = reader["Name"].ToString();
            txtBoxFather.Text = reader["Father"].ToString();
            TextBoxGender.Text = reader["Gender"].ToString();
            TextBoxAge.Text = "";
            TextBoxCity.Text = reader["City"].ToString();
            TextBoxCountry.Text = reader["Country"].ToString();
            TextBoxDepartment.Text = reader["Department"].ToString();
            TextBoxDegree.Text = reader["Degree"].ToString();
            TextBoxYear.Text = reader["Year"].ToString();
            TextBoxJobTittle.Text = reader["JobTittle"].ToString();
            TextBoxJobCity.Text = reader["JobCity"].ToString();
            TextBoxJobCountry.Text = reader["JobCountry"].ToString();
            TextBoxOrganization.Text = reader["Organization"].ToString();
        

        conn.Close();
     

【讨论】:

以上是关于SqlDataReader 读取方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

多维动态数组,为啥不起作用?

UITableViewCell 样式字幕多行不起作用

2018第17周总结

使用dwr后,javaweb设置的session超时失效,web.xml和tomcat设置都不起作

Hibernate HQL Count Distinct 不起作用?

我的Android进阶之旅------&gt;Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法