Это большой отход от того, с чего вы начали.Но у вас есть несколько проблем.Вы должны использовать оператор USING для объектов с интерфейсом IDisposable (соединения, команды и т. Д.).
Этот код не проверен, но должен быть очень близким.
Начните с созданияхранимой процедуры, чтобы вы могли начать создавать слои в своем приложении.
create Procedure Question_Insert
(
@Libelle varchar(50)
, @Bareme varchar(50)
, @Filliere varchar(50)
, @QuestionID int output
) as
set nocount on;
INSERT INTO QUESTION
(
Libelle
, Bareme
, Filliere
)
values
(
@Libelle
, @Bareme
, @Filliere
)
select @QuestionID = SCOPE_IDENTITY()
Затем в вашем коде dotnet вам нужно изменить несколько вещей, чтобы сделать его более чистым и надежным.В идеале вы должны делать что-то лучше, чем просто возвращать 0 в случае ошибки.Отладка будет очень сложной, если что-то пойдет не так, если вы просто вернете 0. Это похоже на сообщение об ошибке «Произошла ошибка».Довольно бесполезно.Сделайте что-нибудь с ошибкой.Захватите сообщение, чтобы вы могли исправить его.
public int AddQuestionOrientation(Question questionForAdd)
{
try
{
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlCommand command = new SqlCommand("Question_Insert"))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Libelle", SqlDbType.VarChar, 50).Value = questionForAdd.Libelle;
command.Parameters.Add("@Bareme", SqlDbType.VarChar, 50).Value = questionForAdd.Bareme;
command.Parameters.Add("@Filliere", SqlDbType.VarChar, 50).Value = questionForAdd.IdFiliere;
command.Parameters.Add("@QuestionID", SqlDbType.Int).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
return int.Parse(command.Parameters["@QuestionID"].Value.ToString());
}
}
}
catch (Exception ex)
{
return 0;
}
}