Проблемы с вызовом хранимой процедуры из VB.NET - PullRequest
3 голосов
/ 19 февраля 2010

Как вы, вероятно, очень скоро увидите, я новичок в VB.NET, и у меня возникли некоторые проблемы с получением вывода из хранимой процедуры в SQL Server 2005.

Это код, который я использую

    Dim con As New SqlConnection
    Dim cmd As New SqlCommand("esp_getDates", con)
    Dim par As New SqlParameter("@PlaceID", SqlDbType.Int, 3906)
    con.ConnectionString = "Data Source=localhost\SQLEXPRESS;Initial Catalog=ProgramDB;User ID=test;Password=test"
    con.Open()
    cmd.CommandType = CommandType.StoredProcedure
    cmd.Parameters("@PlaceID").Direction = ParameterDirection.Output
    cmd.ExecuteNonQuery()
    con.Close()

Я получаю ошибку;

SqlParameter с именем_параметра '@PlaceID' не содержится в этой SqlParameterCollection.

Кто-нибудь видит, что я делаю неправильно / есть предложения, как я могу это исправитьЭто?Примеры кода были бы очень полезны, и любая помощь очень ценится.

1 Ответ

8 голосов
/ 19 февраля 2010

Вы на самом деле не добавляете параметр в коллекцию cmd.Parameters:

cmd.Parameters.Add(par)

В качестве альтернативы просто добавьте параметр, не создавая экземпляр объекта Parameter явно:

cmd.Parameters.Add("@PlaceID", SqlDbType.Int)
cmd.Parameters("@PlaceID").Value = 3906

Кроме того, я бы следовал принципу использования переменной как можно ближе к объявлению и реорганизовал бы вещи следующим образом:

Dim con As New SqlConnection("Data Source=localhost\SQLEXPRESS;Initial Catalog=ProgramDB;User ID=test;Password=test")
con.Open()

Dim cmd As New SqlCommand("esp_getDates", con)

Try
    cmd.CommandType = CommandType.StoredProcedure
    cmd.Parameters.Add("@PlaceID", SqlDbType.Int)
    cmd.Parameters("@PlaceID").Value = 3906
    cmd.ExecuteNonQuery()

Finally
    If cmd IsNot Nothing Then cmd.Dispose()
    If cn IsNot Nothing AndAlso cn.State <> ConnectionState.Closed Then cn.Close()
End Try
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...