Member 11644373 Ответов: 1

Как написать хранимую процедуру


Привет всем, я только начал изучать хранимую процедуру. Поскольку я смог создать SP (хранимую процедуру) для простого запроса, но застрял в некоторых запросах.
как показано ниже
Цитата:
var collection = Repeater0.Предметы;

по каждому элементу (пункт RepeaterItem в коллекцию)
{
HiddenField QID = (HiddenField)item.FindControl ("QID");

д инт = инт.Синтаксический анализ(qid по.Значение);

строка ответа = запрос.Форма[q.Метод toString()];
строка идентификатор = конвертировать.ToString(Session ["UserID"]);
строки ID2, которое = конвертировать.ToString(Session ["ID"]);
строковое соединение = ConfigurationManager.AppSettings ["соединение"].Метод toString();
Sqlconnection для подключения = новое sqlconnection(подключение);
связи.Открыть();
Команда sqlcommand cmd и = новая команда sqlcommand("вставить в t_AnswerSheet(идентификатор пользователя,qid по, AnswerId,AnswerResult) значения('" + идентификатор + "','" + г + "',(выберите помощь из t_Answers где qid по - ='" + М + " и AOptions ='" + ответ + "'),(выбрать AnswerResult от t_Answers где qid по - ='" + М + " и AOptions ='" + ответ + "'))", всегда оставаться на связи.);
//cmd. Parameters. Add ("@sqlpara", id);
//cmd. Parameters. Add ("@sqlparb", q);
//cmd. Parameters. Add ("@sqlparc", ответ);

УМК.Метод executenonquery();
связи.Закрывать();
}
Ответ.Перенаправление ("Successfullsubmit. aspx");
}



Так что если кто-нибудь может мне помочь

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

Я использую

create procedure BtnSubmit_Click	
AS
Insert into t_AnswerSheet(UserId,QId, AnswerId,AnswerResult) values('" + id + "','" + q + "',(select AID from t_Answers where QId='" + q + "' and AOptions ='" + answer + "'),(select AnswerResult from t_Answers where QId='" + q + "' and AOptions ='" + answer + "'))
go

1 Ответов

Рейтинг:
9

OriginalGriff

Нет.
Во-первых, никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
И это особенно не будет работать вообще, когда вы пишете его как хранимую процедуру, потому что она выполняется в SQL Server, который не имеет никакого доступа к вашим переменным кода C#.

Создайте простую хранимую процедуру для вставки:

CREATE PROC [dbo].Sample
@ID varchar(100)
@VAL varchar(100)
AS
BEGIN
    INSERT INTO MyTable (Id, ValueColumnName) VALUES (@ID, @VAL)
END
А затем используйте его в своем коде C# :
using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand com = new SqlCommand("Sample", con))
        {
        com.CommandType = CommandType.StoredProcedure;
        com.Parameters.AddWithValue("@ID", id);
        com.Parameters.AddWithValue("@VAL", "This goes in the DB");
        com.ExecuteNonQuery();
        }
    con.Close();
    }
Попробуйте это сделать, заставьте его работать на тестовой базе данных, а затем используйте те же принципы, чтобы создать подходящую для вашей задачи.


Member 11644373

Чем вам это было полезно

OriginalGriff

Пожалуйста!