none
Sqldatasource控件的insertQuery无法获取session值? RRS feed

  • 问题

  • 如题,我在SqlDataSource1_Inserting事件里设置了一个session["Progress"],想要在数据库插入操作前,给“审批流程”参数赋值,

    如上图所示,而且我设置断点看到session里面已经有值了,但插入操作后,数据库的审批流程字段里还是null,请问可能的原因,谢谢了

    2012年7月18日 1:46

答案

  • 先请你设定ConvertEmptyStringToNull为false,主要是要用来尝试确定你的Session值是不是没取到,或许你可以在执行Insert前,先把Session["Progress"]的内容印出来看看,特别注意区分大小写。

    至于中文的问题我倒是不确定,不过你可以从网络上查到,有许多人建议避免使用中文的变量名称或是域名,因为这样有可能会发生一些奇怪的状况。



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月18日 3:23
  • 感谢这位大哥,您给我了新的思路,小弟我在一中午浑浑噩噩的午睡后,解决了问题。

    我一开始是在sqldatasource_inserting()里写的Session["Progress"] = "test";后来换成在Button_Click()里写的,竟然就能获取到。我是用FormView绑定的SqlDataSource控件,直接启用了插入功能,生成的插入模板。但其中某一个字段不能在insertTemplate里获取,必须从Session里获取。我怀疑SqlDataSource控件里有什么机制导致了这个问题,微软真是让我又爱又恨啊

    2012年7月18日 6:31

全部回复

  • 可以请你把你aspx内容贴上来看看吗?谢谢。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月18日 2:23
  • <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                ConnectionString="<%$ ConnectionStrings:CS %>" 
                InsertCommand="INSERT INTO [LLD] ([项目名称], [项目号], [单项工程名称], [档案号], [联络原因], [投资增减额], [联络内容], [审批流程], [审批进度]) VALUES (@项目名称, @项目号, @单项工程名称, @档案号, @联络原因, @投资增减额, @联络内容, @审批流程, @审批进度)"
                oninserted="SqlDataSource1_Inserted" oninserting="SqlDataSource1_Inserting">
                <InsertParameters>
                    <asp:Parameter Name="项目名称" Type="String" />
                    <asp:Parameter Name="项目号" Type="String" />
                    <asp:Parameter Name="单项工程名称" Type="String" />
                    <asp:Parameter Name="档案号" Type="String" />
                    <asp:Parameter Name="联络原因" Type="String" />
                    <asp:Parameter Name="投资增减额" Type="String" />
                    <asp:Parameter Name="联络内容" Type="String" />
                    <asp:SessionParameter DefaultValue="" Name="审批流程" SessionField="Progress" Type="String" />
                    <asp:Parameter DefaultValue="施工单位" Name="审批进度" Type="String" />
                </InsertParameters>
    </asp:SqlDataSource>麻烦您帮我看看

    2012年7月18日 2:50
  • 或许你可以先试试看把SessionParameter的ConvertEmptyStringToNull设定为false看看。

    http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.parameter.convertemptystringtonull.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月18日 2:58
  • 谢谢您,这样做,确实数据库里相应字段不是null了,只是变成一个空字符串,还不是我想保存的内容。

    我在想是不是Session的Name不能是中文啊

    2012年7月18日 3:04
  • 先请你设定ConvertEmptyStringToNull为false,主要是要用来尝试确定你的Session值是不是没取到,或许你可以在执行Insert前,先把Session["Progress"]的内容印出来看看,特别注意区分大小写。

    至于中文的问题我倒是不确定,不过你可以从网络上查到,有许多人建议避免使用中文的变量名称或是域名,因为这样有可能会发生一些奇怪的状况。



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月18日 3:23
  • 感谢这位大哥,您给我了新的思路,小弟我在一中午浑浑噩噩的午睡后,解决了问题。

    我一开始是在sqldatasource_inserting()里写的Session["Progress"] = "test";后来换成在Button_Click()里写的,竟然就能获取到。我是用FormView绑定的SqlDataSource控件,直接启用了插入功能,生成的插入模板。但其中某一个字段不能在insertTemplate里获取,必须从Session里获取。我怀疑SqlDataSource控件里有什么机制导致了这个问题,微软真是让我又爱又恨啊

    2012年7月18日 6:31
  • 好像没直接帮你找到问题点,不过至少你的问题已经解决了,恭喜!

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月18日 6:51