【问题标题】:SqlDataSource Insert code behind variableSqlDataSource 在变量后面插入代码
【发布时间】:2012-08-23 14:23:25
【问题描述】:

我有以下 SqlDataSource

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:orangefreshConnectionString1 %>" 
        InsertCommand="INSERT INTO [Chat] ([Username], [Message]) VALUES (@Username, @Message)" 
        SelectCommand="SELECT [Id], [Username], [Message], [Date] FROM [Chat] ORDER BY [Id]" >
        <InsertParameters>
            <asp:Parameter Name="Message" Type="String" />
            <asp:Parameter Name="Date" Type="DateTime" /> 
            <asp:Parameter Name="Username" Type="String" />
        </InsertParameters>
    </asp:SqlDataSource>

其中控制以下FormView:

<asp:FormView ID="FormView1" runat="server" DefaultMode="Insert"
        OnItemInserted="fv_ItemInserted" RenderOuterTable="False" 
            DataSourceID="SqlDataSource1">
        <InsertItemTemplate>
            <asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
            <asp:TextBox ID="TextBox1" runat="server" CssClass="chattxtbox"
            Text='<%# Bind("Message") %>' autocomplete="off"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" CommandName="insert" style="display:none" Text="Button" OnClick="insertUser"/>
            </asp:Panel>
        </InsertItemTemplate>
        </asp:FormView>

我希望能够将变量的内容放入用户名列,所以在 Button1 上我设置了以下事件:OnClick="insertUser"

 protected void insertUser(object sender, EventArgs e)
    {
        string username1 = User.Identity.Name;
        SqlDataSource1.InsertParameters.Add("Username", username1);
        SqlDataSource1.Insert();
    }

这不起作用,我根本没有收到任何 SQL 错误消息,这是正确的方法吗?我哪里做错了?

【问题讨论】:

  • 您的数据库中是否需要 Message 和 Date 列?
  • 所有列都是必需的
  • 你可以尝试添加message参数,看看它是否插入?

标签: asp.net .net sqldatasource


【解决方案1】:

将插入 Parameter 更改为 SessionParameter

<InsertParameters>
   <asp:Parameter Name="Message" Type="String" />
   <asp:Parameter Name="Date" Type="DateTime" /> 
   <asp:Parameter Name="Username" Type="String" />
   <asp:SessionParameter Name="Username" SessionField="Username" Type="String" />
</InsertParameters>

在 Page_Load 处理程序中,

Session["Username"]=User.Identity.Name;

【讨论】:

  • 这听起来不错,但我仍然得到相同的结果......没有任何反应。我认为这可能是我的 FormView 上的东西,按 Enter 可能不会触发,但我只是尝试从文本框插入,一切正常。
  • 它会抛出异常吗?我认为你应该删除 Date 参数,因为这个 SQL 语句 - INSERT INTO [Chat] ([Username], [Message]) VALUES (@Username, @Message)
  • 好的,我好像遇到了一些本地主机冲突,这个解决方案效果很好,干杯人。
【解决方案2】:

在这里你想将你的参数声明为Control Parameter,然后你不需要在代码中为参数赋值。你可以直接调用insert。

【讨论】:

  • 我如何将 User.Identity.Name 分配为一个值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
相关资源
最近更新 更多