Передать параметр объекта в хранимую процедуру с помощью SqlHelper
У меня есть таблица SQL, как это:
ID
столбец идентичности.
И у меня есть класс для этой таблицы в проекте ASP.Net, как это:
public class Topic
{
public int ModuleID { get; set; }
public string Name { get; set; }
public string BodyHTML { get; set; }
}
Также у меня есть хранимая процедура:
ALTER PROCEDURE [dbo].[addTopic]
@Topic dbo.Topic READONLY
AS
BEGIN
insert into OnlineHelp_Topic
select * from @Topic
END
Я хочу передать Topic
объект из проекта и выполнить эту хранимую процедуру с помощью SqlHelper.
Я прочитал много постов, как это и создать User-Defind Table
в SQL Server, и я тестирую этот код:
Topic Topic = new Topic()
{
BodyHTML = "test body",
ModuleID = 1000,
Name = "test"
};
string constr = ConfigurationManager.ConnectionStrings["testConnection"].ConnectionString;
int rowsAffected = SqlHelper.ExecuteNonQuery(constr, "addTopic", new SqlParameter("@Topic", Topic));
Но этот код имеет ошибку в SqlHelper.ExecuteNonQuery(...)
как это;
Было бы очень полезно, если бы кто-то мог объяснить решение этой проблемы.
2 ответа
Попробуйте передать параметры темы следующим образом:
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@ModuleID ", topic.ModuleID ));
parameters.Add(new SqlParameter("@Name", topic.Name));
parameters.Add(new SqlParameter("@BodyHTML", topic.BodyHTML));
int rowsAffected = SqlHelper.ExecuteNonQuery(constr, "addTopic", parameters.ToArray());
Вам также нужно будет изменить хранимую процедуру.
Вам нужно передать DataTable в качестве примера параметра
SqlHelper.ExecuteNonQuery(constr, "addTopic", new SqlParameter("@Topic", TopicDatatable));
DataTable должен иметь одинаковые столбцы: имена и типы данных, определяемые пользователем типа таблицы.