Я знаю, что этот поток будет, вероятно, получите помечен как дубликат, но я просмотрел все подобные сообщения, но никто, похоже, чтобы помочь решить эту проблему:Procdure ожидает параметр @location, который не был предоставлен. Это сводит меня с умом
У меня есть этот код надрез:
Dim loc As String = DirectCast(GridView1 _
.FooterRow.FindControl("txtLocation"), TextBox).Text
cmd.CommandText = "insert into Locations(Location " & _
") values(@Location);" & _
"select LocationID, Location from locations"
cmd.Parameters.AddWithValue("@Location", SqlDbType.VarChar).Value = loc
Просто чтобы это было просто.
Это прекрасно работает.
Затем я повернул этот встроенный код в хранимую процедуру:
ALTER PROCEDURE [dbo].[spx_AddNewLoc]
@Location varchar(150)
AS
set nocount on
BEGIN --add new request type
INSERT INTO Locations(Location)VALUES(@Location)
SELECT LocationID, Location from locations
END
set nocount off
Тогда назвал его в моем CodeFile:
Dim loc As String = DirectCast(GridView1 _
.FooterRow.FindControl("txtLocation"), TextBox).Text
cmd.CommandText = "spx_AddNewLoc "
cmd.Parameters.AddWithValue("@Location", SqlDbType.VarChar).Value = loc
Я просто продолжаю получать «Процедура ожидает @location, который не поставлялся.»
Любые идеи, что мне не хватает?
<FooterTemplate>
<asp:TextBox ID="txtlocation" runat="server" placeholder="Please enter location here..." style="width:400px;"></asp:TextBox><br />
</FooterTemplate>
<FooterTemplate>
<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick = "AddNewLocation" />
</FooterTemplate>
«// ** последний код ниже
Protected Sub AddNewLocation(ByVal sender As Object, ByVal e As EventArgs)
Dim IsAdded As Boolean = True
Dim loc As String = DirectCast(GridView1 _
.FooterRow.FindControl("txtLocation"), TextBox).Text
Dim con As New SqlConnection(strConnString)
Dim cmd As New SqlCommand()
cmd.CommandType = CommandType.Text
cmd.CommandText = "insert into Locations(Location " & _
") values(@Location);" & _
"select LocationID, Location from locations"
cmd.Parameters.Add("@Location", SqlDbType.VarChar).Value = loc
If IsAdded = True Then
lblMsg.Text = (Convert.ToString("'") & loc) + "' location added successfully!"
lblMsg.ForeColor = System.Drawing.Color.Green
Else
lblMsg.Text = (Convert.ToString("Error while adding '") & loc) + "' locaton!"
lblMsg.ForeColor = System.Drawing.Color.Red
End If
GridView1.DataSource = GetData(cmd)
GridView1.DataBind()
End Sub
Вы на 100% уверены, что 'loc' не' Nothing' И что выглядит нижний колонтитул GridView? – VDWWD
@VDWWD, прежде всего, спасибо за ваш ответ.Я абсолютно уверен, что loc получает значение, переданное ему из gridview. Все работает отлично, когда я использую встроенный я опубликовал. Вот как выглядит нижний колонтитул GridView. Пожалуйста, см. Выше для обновленного кода. – Tairoc
Возможный дубликат [При выполнении команды.Prepare() У меня есть метод SqlCommand.Prepare требует, чтобы все параметры имели явно установленный тип «ошибка» (http://stackoverflow.com/q/36554082/11683) – GSerg