2

我有一个这样的 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(...)这样的错误;

错误

如果有人可以解释这个问题的解决方案,那将非常有帮助。

4

2 回答 2

1

尝试传递主题参数,如下所示:

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());

您还需要修改存储过程。

于 2016-12-09T11:24:31.043 回答
0

您需要传递一个 DataTable 作为参数示例

SqlHelper.ExecuteNonQuery(constr, "addTopic", new SqlParameter("@Topic", TopicDatatable));

DataTable 必须具有相同的列:用户定义表类型的名称和数据类型。

于 2018-07-08T05:03:45.633 回答