我有一个这样的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执行此存储过程。
我阅读了许多帖子,例如this并在SQL Server中创建了User-Defind Table
,我测试了这段代码:
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(...)
中有错误;
如果有人可以解释这个问题的解决方案,那将非常有用。
答案 0 :(得分:0)
尝试传递以下主题参数:
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 :(得分:0)
您需要传递一个DataTable作为参数 例子
SqlHelper.ExecuteNonQuery(constr, "addTopic", new SqlParameter("@Topic", TopicDatatable));
数据表必须具有相同的列:用户定义表类型的名称和数据类型。