Передать параметр объекта в хранимую процедуру с помощью 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 должен иметь одинаковые столбцы: имена и типы данных, определяемые пользователем типа таблицы.

Другие вопросы по тегам