Ошибка: SQLParamenter с именем_параметра @myparm не содержится в этой коллекции SQLParameter - PullRequest
0 голосов
/ 17 марта 2010

Доброе утро,

Я работаю над приложением ASP.NET 3.5 webforms и написал следующий код:

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
    Dim connectionString As String = WebConfigurationManager.ConnectionStrings("Diel_inventoryConnectionString").ConnectionString
    Dim con As New SqlConnection(connectionString)
    Dim adapter1 As New SqlDataAdapter

    adapter1.SelectCommand = New SqlCommand
    adapter1.SelectCommand.CommandType = CommandType.StoredProcedure
    adapter1.SelectCommand.CommandText = "PartSproc"

    Dim parmNSN As New SqlParameter("@NSN", SqlDbType.NVarChar)
    Dim parmName As New SqlParameter("@PartName", SqlDbType.NVarChar)
    txtNSN.Text = adapter1.SelectCommand.Parameters("@NSN").Value
    txtSearch.Text = adapter1.SelectCommand.Parameters("@PartName").Value

    Dim dt As New DataTable()
    adapter1.Fill(dt)
    MySearch.DataSource = dt
    MySearch.DataBind()

    End Sub

Когда я запускаю страницу, я получаю сообщение об ошибке. SQLParameter с @NSN не содержится в этой коллекции SQLParameter. Я попытался использовать апострофы вокруг @NSN и @PartName, но это тоже не работает и приводит к ожидаемой ошибке выражения.

Как мне исправить вышеприведенный код, чтобы он правильно ссылался на параметры @NSN и @PartName?

РЕДАКТИРОВАТЬ: новый код ниже

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
    Dim connectionString As String = WebConfigurationManager.ConnectionStrings("Diel_inventoryConnectionString").ConnectionString
    Dim con As New SqlConnection(connectionString)
    Dim cmd As New SqlCommand("PartSproc", con)
    cmd.CommandType = CommandType.StoredProcedure
    Dim adapter1 As New SqlDataAdapter

    Dim parmNSN As New SqlParameter("@NSN", SqlDbType.NVarChar)
    Dim parmName As New SqlParameter("@PartName", SqlDbType.NVarChar)
    adapter1.SelectCommand.Parameters.Add(parmNSN)
    adapter1.SelectCommand.Parameters.Add(parmName)
    adapter1.SelectCommand.Parameters("@NSN").Value = txtNSN.Text
    adapter1.SelectCommand.Parameters("@PartName").Value = txtSearch.Text
    Using con
        Dim dt As New DataTable()
        adapter1.SelectCommand = cmd
        adapter1.Fill(dt)
        MySearch.DataSource = dt
        MySearch.DataBind()
    End Using
End Sub

Теперь я получаю сообщение об ошибке. Ссылка на объект не установлена ​​на экземпляр объекта, ссылающегося на параметр добавления parmNSN. Действительно ли они нужны для добавления операторов paraameter, поскольку я уже установил их равными текстовым полям ниже?

Спасибо, Sid

Ответы [ 3 ]

1 голос
/ 17 марта 2010

Я думаю, вы случайно перенесли присвоение значений параметров - попробуйте вместо этого:

adapter1.SelectCommand.Parameters("@NSN").Value = txtNSN.Text
adapter1.SelectCommand.Parameters("@PartName").Value = txtSearch.Text
0 голосов
/ 17 марта 2010

Чтобы добавить то, что сказали Andrew & TomTom, вам нужно добавить параметры в набор параметров SelectCommand.

Что-то вроде

adapter1.SelectCommand.Parameters.Add(parmNSN);
adapter1.SelectCommand.Parameters.Add(parmName);

Сделайте это, прежде чем позвонить ExecuteReader() или ExecuteScalar

0 голосов
/ 17 марта 2010

Вы прочитали сообщение об ошибке? Созданный вами Sqlparameter никогда не добавляется в коллекцию Sqlparameter команды;) Это то, что также сообщает вам сообщение об ошибке.

Вы создаете параметры, но они, так сказать, "висят в воздухе".

...