我知道整个Internet上都详细讨论了这个主题,但是我只是不了解我所读/发现的任何内容。所以我要来这里。
我有一个存储过程,该存储过程带有一个初始参数,该初始参数指示需要执行哪些操作(例如,Insert,Check和Get)。我这样做只是为了将特定对象的所有功能放在一个文件中(可能不是最好的设计,但这就是我的位置)。因此,当调用此存储过程时,第一个参数是需要发生的事情-要插入数据的内容,那么“ Insert”是第一个参数。
我遇到问题的地方是尝试将数据从数据库“加载”到对象中。我有Dapper,但我只是根本不了解它的实际工作原理。
存储过程:
CREATE OR ALTER PROCEDURE sp_Customers
@Action varchar(max)
@customername = varchar(max)
AS
BEGIN
SET NOCOUNT ON;
IF @Action = 'Retrieve'
BEGIN
SELECT customer_id, internal_id, customer_address, city, customer_state, zip, project, sponsor, customer_name
FROM tbl_Customers
WHERE customer_name = @customername;
RETURN
END
客户类别:
public class Customer{
public int customer_id {get;}
public int internal_id { get; set; }
public string customer_address { get; set; }
public string city { get; set; }
public string customer_state { get; set; }
public int zip { get; set; }
public int project { get; set; }
public int sponsor { get; set; }
public string customer_name { get; set; }
我只希望此类中的一个函数用数据库中的信息填充自身。我有Dapper,但是这使我很困惑,我已经在互联网上阅读了各种各样的东西,并且使我的生活变得很混乱...难道真的很难装载物体吗?
答案 0 :(得分:1)
类似的事情(为了可读性而分成多行,未经测试或编译)
public Customer GetCustomer(string name)
{
using (var connection = new SqlConnection(...))
{
var spName = "sp_Customers";
var parameters = new
{
Action = "Retrieve",
CustomerName = name
};
var commandType = CommandType.StoredProcedure;
return connection.QuerySingleOrDefault<Customer>(spName, parameters, commandType: commandType);
}
}
答案 1 :(得分:1)
我的存储过程带有一个初始参数,该参数指示 需要执行什么操作(例如,插入,检查和获取)。我做 这只是为了将特定对象的所有功能放在一个文件中 (可能不是最好的设计,但这就是我的位置)。所以当这个 调用存储过程,第一个参数是需要发生什么 -要插入数据的内容,那么“ Insert”是第一个参数。
我认为这就是您所有问题的来源。除非我缺少任何内容,否则您甚至应该无法从该存储过程返回数据。因为在SQL中,存储过程当然需要定义的返回类型。这样select永远不会发送任何东西。
您应该具有包含CRUD操作的一部分的存储过程: