Maideen Abdul Kader Ответов: 2

Как выполнить хранимую процедуру с помощью ASP.NET?


Привет
У меня есть проблема, из-за которой я не смог выполнить хранимую процедуру MSsql в asp.net

Он работает нормально и дает возвращаемое значение при выполнении в консоли сервера Mssql.
Мой код в asp.net страница
Dim strConnString As String = ConfigurationManager.ConnectionStrings("ConnectString").ConnectionString
Dim con As New SqlConnection(strConnString)
Dim cmd As New SqlCommand()
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "usp_Z_SO_Details"
cmd.Parameters.AddWithValue("@DATEFROM", Me.txtDateFrom.Text)
cmd.Parameters.AddWithValue("@DATETO", Me.txtDateTo.Text)
cmd.Parameters.AddWithValue("@CATEGORY ", Me.cboCategory.SelectedValue)
cmd.Connection = con
con.Open()
cmd.ExecuteReader()
con.Close()
con.Dispose()


Моя хранимая процедура


INSERT INTO [dbo].[RPT_SO_Details](SoNo, SDate, SDay, DealerCode, Dealer, DistCode, DistName, Area, 
		                                   RouteCode, [Route], CatCode, Category, ZoneCode, ZoneDesc, NoStand, 
										   Nocopies)
		SELECT SoNo, SDate, SDay, DealerCode, Dealer, DistCode, DistName, Area, 
		                                   RouteCode, [Route], CatCode, Category, ZoneCode, ZoneDesc, NoStand, 
										   Nocopies
		FROM SUNMedia.dbo.StandingOrder
		
		WHERE SDATE >= @DATEFROM AND SDATE <= @DATETO AND CATEGORY = @CATEGORY 
		ORDER BY CATEGORY

		SELECT * FROM [dbo].[RPT_SO_Details] ORDER BY ROUTECODE,sono



Пожалуйста, посоветуйте мне, где я сделал что-то не так

Спасибо

Мейден

Что я уже пробовал:

Dim strConnString As String = ConfigurationManager.ConnectionStrings("ConnectString").ConnectionString
        Dim con As New SqlConnection(strConnString)
        Dim cmd As New SqlCommand()
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "usp_Z_SO_Details"
        cmd.Parameters.AddWithValue("@DATEFROM", Me.txtDateFrom.Text)
        cmd.Parameters.AddWithValue("@DATETO", Me.txtDateTo.Text)
        cmd.Parameters.AddWithValue("@CATEGORY ", Me.cboCategory.SelectedValue)
        cmd.Connection = con
        con.Open()
        cmd.ExecuteReader()
        con.Close()
        con.Dispose()

2 Ответов

Рейтинг:
2

OriginalGriff

Начните с трех вещей:
1) Не используйте ExecuteReader - вы вообще не используете результаты, потому что вы отбрасываете SqlDataReader, который он возвращает. Почему вы SP-код вообще делаете окончательный выбор, учитывая, что это оператор INSERT INTO SELECT - ваш код вернет все строки...
2) Проверьте свои пользовательские данные: отправка текстовых дат в SQL-плохая идея. Воспользуйся значение datetime.Метод tryparse[^] для преобразования данных Пользователя в значения DateTiume - сообщения о проблемах пользователю - и передачи значений DateTime непосредственно в SQL в качестве параметров. Передача строк означает, что SQL должен "угадать", в каком формате находится дата, и он не всегда использует ту же локаль, что и ваш пользователь.
3) я знаю, что это чертовски очевидно, но проверьте тип данных столбца вашего столбца SDATE - если это строка, а не дата, DATETIME или DATETIME2, то это вызовет серьезные проблемы со сравнением дат. Вы будете удивлены, сколько людей думают, что NVARCHAR-это хороший тип данных для хранения дат, и это всегда создает им реальные проблемы позже.


Рейтинг:
1