初学.net,困扰本人比较久的一个问题,一直没能解决……
设置一个表用作投票用,有两列:ID和PS
格式:
ID PS
hao (数值)
yiban (数值)
cha (数值)
用session["select"]作为传递。
在SqlDataSource里设置了SELECT和UPDATE语句
SELECT ps FROM diaocha WHERE (ID = @select)
然后绑定select作为参数名,参数值为session("select")UPDATE语句
UPDATE diaocha SET ps = ps + 1 WHERE (ID = @select)
然后同样绑定到session
结果SELECT语句执行成功(绑定到gridview,假设传递hao,gridview只显示hao的数值),UPDATE失败(不自加),什么原因?
但是我用查询分析器执行查询时手动输入ID的值(hao或yiban或cha)后能正常触发更新顺便询问下如何进行如下绑定。
选择好的有<label1>人
选择一般的有<label2>人
选择差的有<label3>人
将ID为hao的PS的值绑定给label1,以此类推新手问题求解……自学真辛苦

解决方案 »

  1.   

    结果SELECT语句执行成功(绑定到gridview,假设传递hao,gridview只显示hao的数值),UPDATE失败(不自加),什么原因? 
    ==
    GridView的DataKeyNames设置为ID了么?可以贴贴页面代码
      

  2.   

    选择好的有 <label1>人 
    选择一般的有 <label2>人 
    选择差的有 <label3>人 
    ==
    貌似 select * from diaocha 然后绑定到DataList上即可
      

  3.   

    主要的代码都在HTML内
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:toupiaoConnectionString %>"
                SelectCommand="SELECT ID,ps FROM diaocha1 WHERE (ID = @no)" UpdateCommand="UPDATE diaocha1 SET ps = ps + 1 WHERE (ID = @no)">
                <UpdateParameters>
                    <asp:SessionParameter Name="no" SessionField="select" Type="String" />
                </UpdateParameters>
                <SelectParameters>
                    <asp:SessionParameter Name="no" SessionField="select" Type="String" />
                </SelectParameters>
                <FilterParameters>
                    <asp:SessionParameter Name="no" SessionField="select" />
                </FilterParameters>
            </asp:SqlDataSource>
            &nbsp;</div>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField DataField="ps" HeaderText="ps" SortExpression="ps" />
                </Columns>
            </asp:GridView>
      

  4.   

    不建議使用SqlDataSource控件
    自己寫代碼連接數據庫清晰明了,有什麽問題也好檢查不明白你是兩個頁面還是一頁面
    如果是兩個頁面:
    一個頁面到另一個頁面的傳參,如果安全性要求不是很高的話也不必要用Session
    用Default.aspx?select=值就可以了
    在另一個頁面用Request.QueryString["select"]取值如果是一個頁面:
    點擊投票觸發的事件裡面執行連接數據庫,+1操作,然後重新綁定3個label
    (要例子代碼的話說一聲)
      

  5.   

    发一下你传sqlparameter的代码看看是不是写错了.
      

  6.   

    麻烦4楼的了。因为是大学社团试用期布置下来的任务,询问学长后被告知控件入门比较快……
    在我看来应该不是没能取值的问题,因为session已经正确传递给SELECT语句并表达了。而且我试过多种传递方法例如QueryString甚至先赋值给一个label(好验证值是否传过去了)再用control传给SqlDataSource。SELECT语句都能正常获得参数的值并查询,但是UPDATE一直不起作用重新放代码,因为全用控件,几乎用到C#代码
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:toupiaoConnectionString %>"
                SelectCommand="SELECT ID, ps FROM diaocha1 WHERE (ID = @ID)" UpdateCommand="UPDATE diaocha1 SET ps = ps + 1 WHERE (ID = @ID)">
                <UpdateParameters>
                    <asp:SessionParameter Name="ID" SessionField="select" Type="String" />
                </UpdateParameters>
                <SelectParameters>
                    <asp:SessionParameter Name="ID" SessionField="select" Type="String" />
                </SelectParameters>
            </asp:SqlDataSource>
            </div>
            <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("ps") %>'></asp:Label>
                </ItemTemplate>
            </asp:DataList>
      

  7.   

    加上        if (!Page.IsPostBack)
                SqlDataSource1.Update();
    问题解决,谢谢大家的帮助
      

  8.   

    你總得有個地方去觸發它的更新啊,不是寫了UpdateCommand它就會自動更新的
     
    少個SqlDataSource1.Update();