首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过SqlHelper将对象参数传递给存储过程

通过SqlHelper将对象参数传递给存储过程
EN

Stack Overflow用户
提问于 2016-12-07 23:16:17
回答 2查看 4.3K关注 0票数 2

我有一个这样的SQL表:

ID是标识列。

我在ASP.Net项目中有一个用于这个表的类,如下所示:

代码语言:javascript
复制
public class Topic
    {
        public int ModuleID { get; set; }
        public string Name { get; set; }
        public string BodyHTML { get; set; }
    }

我还有一个存储过程:

代码语言:javascript
复制
ALTER PROCEDURE [dbo].[addTopic] 
    @Topic dbo.Topic READONLY
AS
BEGIN
    insert into OnlineHelp_Topic
    select * from @Topic
END

我想从项目中传递一个Topic对象,并通过SqlHelper执行这个存储过程。

我读了很多像this这样的文章,在SQL Server中创建了一个User-Defind Table,我测试了下面的代码:

代码语言:javascript
复制
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(...)中有错误,如下所示;

如果有人能解释一下这个问题的解决方案,那将是非常有帮助的。

EN

回答 2

Stack Overflow用户

发布于 2016-12-09 19:24:31

尝试按如下方式传递主题参数:

代码语言:javascript
复制
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());

您还需要修改存储过程。

票数 1
EN

Stack Overflow用户

发布于 2018-07-08 13:03:46

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

代码语言:javascript
复制
SqlHelper.ExecuteNonQuery(constr, "addTopic", new SqlParameter("@Topic", TopicDatatable));

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41021091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档