c# - c# dapper存储过程返回null
问题描述
我尝试做的所有事情都只是不断吐出空值。这是获取数据的方法
public List<Item> getItems(string item_name)
{
using (IDbConnection connection = new MySqlConnection(Helper.CnnVal("dbConn")))
{
connection.Open();
return connection.Query<Item>($"SELECT * FROM ITEMS WHERE itm_name = 'Jaje'").ToList();
}
}
注意:为了测试目的,查询是硬编码的,通常由存储过程替换, 即使硬编码它仍然返回 null。
项目类
public class Item
{
public int _itm_id { get; set; }
public string _itm_name { get; set; }
public float _itm_price { get; set; }
}
我在按下按钮时运行的 .xaml.cs 文件中也有以下代码
List<Item> items = new List<Item>();
items = da.getItems(txtboxItemNameSearch.Text.Trim());
它总是返回 _itm_id = 0,_itm_name = null,_itm_price = 0。连接打开,插入方法工作正常。该行不为空。我从完美运行的查询中复制了 select 硬编码语句。
这是桌子
CREATE TABLE `items` (
`itm_id` INT(255) NOT NULL AUTO_INCREMENT,
`itm_name` VARCHAR(255) NOT NULL,
`itm_price` FLOAT(8,2) NOT NULL,
PRIMARY KEY (`itm_id`),
UNIQUE INDEX `itm_name` (`itm_name`)
)
解决方案
Dapper 中内置的映射器的默认处理要求类属性名称与列名称匹配或用下划线分隔。
例如,列ItemName
将匹配属性ItemName
,Item_Name
反之亦然。对于不遵循此方案的列,有更复杂的映射可用,如果您想走这条路线,请参阅此先前的答案。
我创建了一个快速示例。
SQL
CREATE DATABASE TEST;
GO
USE TEST;
GO
CREATE TABLE ITEM (
[Id] INT IDENTITY(1, 1)
,[Name] VARCHAR(255)
,[Price] MONEY
);
GO
INSERT INTO ITEM ([Name], [Price])
SELECT 'item 1', 10
UNION SELECT 'item 2', 20
UNION SELECT 'item 3', 30
UNION SELECT 'item 4', 40
UNION SELECT 'item 5', 50
UNION SELECT 'item 6', 60
UNION SELECT 'item 7', 70
UNION SELECT 'item 8', 80
UNION SELECT 'item 9', 90
UNION SELECT 'item 10', 100;
GO
C#
using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var items = getItems("Item 1");
foreach (var item in items)
{
Console.WriteLine("Id: {0}", item.id);
Console.WriteLine("Name: {0}", item.name);
Console.WriteLine("Price: {0}", item.price);
Console.ReadLine();
}
}
public static IList<Item> getItems(string name)
{
using (var connection = new SqlConnection("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=test;Integrated Security=True"))
{
return connection.Query<Item>($"SELECT * FROM ITEM WHERE name = @name",
new { name }).ToList();
}
}
}
public class Item
{
public int id { get; set; }
public string name { get; set; }
public decimal price { get; set; }
}
}
输出
推荐阅读
- python-3.x - 在 python 看门狗中并行处理多个 onCreated 事件
- java - JavaFX 将问号表视图转换为已知类型
- reactjs - 为什么我无法在 Heroku 中连接 Mongodb 服务器?
- java - String 方法按字母顺序从字符串数组中返回第一个字符串
- selenium-webdriver - 需要使用先前的节点子查找下一个节点 xpath
- x86-16 - 两个正数之和为负数
- python - Python 锁定异步套接字操作
- php - 用php转换嵌套数组中的普通数组
- c# - 是否有像 Queue 这样实现 IAsyncEnumerable 的 C# 类?
- linux - Armbian 无法运行脚本