C# 通过SqlHelper将对象参数传递给存储过程
我有这样一个SQL表:C# 通过SqlHelper将对象参数传递给存储过程,c#,sql-server,stored-procedures,ado.net,sqlhelper,C#,Sql Server,Stored Procedures,Ado.net,Sqlhelper,我有这样一个SQL表: public class Topic { public int ModuleID { get; set; } public string Name { get; set; } public string BodyHTML { get; set; } } ID是标识列 我在ASP.Net项目中为这个表设置了一个类,如下所示: public class Topic { public i
public class Topic
{
public int ModuleID { get; set; }
public string Name { get; set; }
public string BodyHTML { get; set; }
}
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
我想从项目中传递一个主题
对象,并通过SqlHelper执行此存储过程
我阅读了许多类似帖子,并在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(…)
中有这样的错误
如果有人能解释这个问题的解决方案,那将非常有帮助。尝试传递如下主题参数:
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());
List参数=新列表();
添加(新的SqlParameter(“@ModuleID”,topic.ModuleID));
parameters.Add(新的SqlParameter(“@Name”,topic.Name));
Add(新的SqlParameter(“@BodyHTML”,topic.BodyHTML));
int rowsAffected=SqlHelper.ExecuteNonQuery(constr,“addTopic”,parameters.ToArray());
您还需要修改存储过程。尝试传递如下主题参数:
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());
List参数=新列表();
添加(新的SqlParameter(“@ModuleID”,topic.ModuleID));
parameters.Add(新的SqlParameter(“@Name”,topic.Name));
Add(新的SqlParameter(“@BodyHTML”,topic.BodyHTML));
int rowsAffected=SqlHelper.ExecuteNonQuery(constr,“addTopic”,parameters.ToArray());
您还需要修改存储过程。您需要将数据表作为参数传递 范例
DataTable必须具有相同的列:用户定义表类型的名称和数据类型。您需要将DataTable作为参数传递 范例
DataTable必须具有相同的列:用户定义表类型的名称和数据类型。错误是什么?我不熟悉
SqlHelper
,但我认为您需要在DataTable
或至少某种类型的集合中传递UDT数据。还有一种方法可以告诉它查询类型是存储过程。@Mahdi我添加了错误。看看这个问题,它可能会给你一些提示:。。。基本上,您需要创建list对象,以便从SPX查询它。错误是什么?我不熟悉SqlHelper
,但我认为您需要在DataTable
或至少某种类型的集合中传递UDT数据。还有一种方法可以告诉它查询类型是存储过程。@Mahdi我添加了错误。看看这个问题,它可能会给你一些提示:。。。基本上,您需要创建list对象,以便从sp查询它