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">
</td>
<td class="style4">
</td>
<td>
</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">
</td>
<td class="style4">
</td>
<td>
</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">
</td>
<td class="style4">
</td>
<td>
</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的主要内容,如果未能解决你的问题,请参考以下文章