SQL 更新 ASP.NET

Posted

技术标签:

【中文标题】SQL 更新 ASP.NET【英文标题】:SQL-Update ASP.NET 【发布时间】:2013-04-15 02:02:32 【问题描述】:

我对 asp.net 很陌生。我做了这个更新sql语句:

Dim dbconn As SqlConnection
    Dim dbcomm As SqlCommand


    dbconn = New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("sqlString"))
    dbconn.Open()

    Dim updateCmd As String = "UPDATE tbl_Project SET ID = @ID," _
     & " Titel = @Titel, CatID = @CatID, Website = @Website," _
     & " Naslag = @Naslag; WHERE ID = @ID;"

    dbcomm = New SqlCommand(updateCmd, _
     dbconn)
    dbcomm.Parameters.Add(New SqlParameter("@ID", SqlDbType.Int))
    dbcomm.Parameters.Add(New SqlParameter("@Titel", _
       SqlDbType.VarChar))
    dbcomm.Parameters.Add(New SqlParameter("@CatID", _
       SqlDbType.Int))
    dbcomm.Parameters.Add(New SqlParameter("@Website", _
       SqlDbType.VarChar))
    dbcomm.Parameters.Add(New SqlParameter("@Naslag", _
       SqlDbType.VarChar))
    dbcomm = New SqlCommand(updateCmd, dbconn)
    dbcomm.ExecuteNonQuery()`

我在 Forview 编辑模式下进行了所有设置。这个想法是,当您搜索记录并单击details 时,它将带您进入可编辑的项目视图。在详细信息页面中,您可以对其进行编辑和更新项目。

问题

当我单击更新按钮时,它会显示:声明我拥有的变量 @ID。而且我不知道自己做错了什么。

这是我的表单视图:

            <table class="style1">
                <tr>
                    <td class="style2">
                        <asp:Label ID="Label1" runat="server" CssClass="kopje" Text="Categorie"></asp:Label>
                    </td>
                    <td class="style3">
                        <asp:Label ID="Label2" runat="server" CssClass="kopje" Text="Klant">        </asp:Label>
                    </td>
                    <td class="style4">
                        <asp:Label ID="Label3" runat="server" CssClass="kopje        " Text="Website"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="Label5" runat="server" CssClass="kopje" Text="Titel">        </asp:Label>
                    </td>
                </tr>
                <tr>
                    <td class="style2">
                        <asp:DropDownList ID="DropDownCat" runat="server" 
                            DataSourceID="SqlDataSourceDrop" DataTextField="Categorie" 
                            DataValueField="Cat_ID" value="0">
                        </asp:DropDownList>
                        <asp:SqlDataSource ID="SqlDataSourceDrop" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:Goed %>" 
                            SelectCommand="SELECT * FROM [tbl_Cat]">
                            <SelectParameters>
                                <asp:QueryStringParameter Name="ID" QueryStringField="ID" Type="Decimal" />
                            </SelectParameters>
                        </asp:SqlDataSource>
                    </td>
                    <td class="style3">
                        <asp:DropDownList ID="DropDownList1" runat="server" 
                            DataSourceID="SqlDataSourceKlant" DataTextField="Bedrijf" 
                            DataValueField="Klant_ID">
                        </asp:DropDownList>
                        <asp:SqlDataSource ID="SqlDataSourceKlant" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:Goed %>" 
                            SelectCommand="SELECT * FROM [tbl_Klant]"></asp:SqlDataSource>
                    </td>
                    <td class="style4">
                        <asp:TextBox ID="TextBoxWebsite" runat="server" Text='<%# Eval("Website") %>'></asp:TextBox>
                    </td>
                    <td>
                        <asp:TextBox ID="TextBoxTitel" runat="server" Text='<%# Eval("Titel") %>'></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="style2">
                        <asp:Label ID="TextBoxOmschrijving" runat="server" CssClass="kopje" 
                            Text="Omschrijving"></asp:Label>
                    </td>
                    <td class="style3">
                        &nbsp;</td>
                    <td class="style4">
                        &nbsp;</td>
                    <td>
                        &nbsp;</td>
                </tr>
                <tr>
                    <td class="style2">
                        <asp:TextBox ID="TextBoxslag" runat="server" Height="200px" 
                            Text='<%# Eval("Naslag") %>' TextMode="MultiLine" Width="350px"></asp:TextBox>
                    </td>
                    <td class="style3">
                        &nbsp;</td>
                    <td class="style4">
                        &nbsp;</td>
                    <td>
                        &nbsp;</td>
                </tr>
                <tr>
                    <td class="style2">
                        <asp:LinkButton ID="LinkButton1" runat="server" 

CausesValidation="True" 
  CssClass="buttons" Text="Update"
  OnClientClick="Verzend"></asp:LinkButton>
                        </td>
                        <td class="style3">
                            &nbsp;</td>
                        <td class="style4">
                            &nbsp;</td>
                        <td>
                            &nbsp;</td>
                    </tr>
                </table>
            </EditItemTemplate>
</asp:FormView>

【问题讨论】:

【参考方案1】:

我相信你需要AddWithValue。你需要指定@ID的值

dbcomm.Parameters.AddWithValue("@ID", "TheValue");
dbcomm.Parameters.AddWithValue("@Titel", "TitelValue");

【讨论】:

然后它说:Argement not specified for parameter "value" 感谢您的努力! @DiederikEEn - 您是否忘记在更新命令中包含 value 好吧,我有这个:bcomm.Parameters.Add(New SqlParameter("@ID", SqlDbType.Int)).Value = 153 dbcomm.Parameters.Add(New SqlParameter("@Titel", _ SqlDbType.VarChar)).Value = TextBoxTitel.Text,但由于某些原因它无法识别文本框【参考方案2】:

你有一个分号 (;) 后面不应该出现

"@Naslag" in your SQL-command (" Naslag = @Naslag**;** WHERE ID = @ID;")。可能足以导致您出现该错误。

【讨论】:

您没有在代码中包含 formview 的开始标记。而且可能不是主要的 sqldatasource。您应该在表单视图的 DataKeyNames 属性中有“ID”。而且您有一个用于类别下拉列表的查询字符串参数。对吗? 认为您可能需要查看此页面以了解如何使用表单视图:msdn.microsoft.com/en-us/library/… 是的,这是正确的,我将 DataKeyNames 设置为 ID 但它没有解决找不到 TextBoxTitel.Text 值的问题,有任何线索吗? 正如您在上面链接中的“edittemplate”标签中看到的,您应该使用 Bind 而不是 Eval。 eval 仅用于显示。但我相信你有更多的问题。您应该模仿该链接中的代码,以及数据源中的更新语句和所有内容。【参考方案3】:

请在您的代码中进行以下更改

         SqlCommand _cmd = _con.CreateCommand();
        _cmd.CommandText = "UPDATE tbl_Project SET ID = @ID," _
         & " Titel = @Titel, CatID = @CatID, Website = @Website," _
         & " Naslag = @Naslag WHERE ID = @ID";
        _cmd.Parameters.Add(new SqlParameter("@ID", '1'));
        _cmd.Parameters.Add(new SqlParameter("@Titel", 'title'));
        _cmd.Parameters.Add(new SqlParameter("@CatID", '1'));
        _cmd.Parameters.Add(new SqlParameter("@Website", 'www.google.com'));
        _cmd.Parameters.Add(new SqlParameter("@Naslag", 'Naslag'));
        if (_cmd.ExecuteNonQuery() > 0)
            return "Record Successfully Updated";
        else
            return "Record not Affected to DataBase";

【讨论】:

是的 - .Add 的重载已过时,已被 AddWithValue 取代。【参考方案4】:

我发现你的代码有一些错误,正确的代码应该是

Dim updateCmd As String = "UPDATE tbl_Project SET ID = @ID, Titel = @Titel, CatID = @CatID, Website = @Website, Naslag = @Naslag WHERE ID = @ID"
dbcomm = New SqlCommand(updateCmd, dbconn)
dbcomm.Parameters.AddWithValue("@ID", value)
dbcomm.Parameters.AddWithValue("@Titel", value)
dbcomm.Parameters.AddWithValue("@CatID", value)
.........
.........
// remove this-> dbcomm = New SqlCommand(updateCmd, dbconn)
dbcomm.ExecuteNonQuery()

【讨论】:

以上是关于SQL 更新 ASP.NET的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET入门教程(经典)

ASP.NET入门教程(经典)

kindEditor

KindEditor编辑器

KindEditor

编辑器KindEditor的使用