选择语句:列名无效,在 C# 中使用 Dapper
Posted
技术标签:
【中文标题】选择语句:列名无效,在 C# 中使用 Dapper【英文标题】:Select statement: Invalid column name, in C# using Dapper 【发布时间】:2020-08-07 07:47:36 【问题描述】:这是我的数据库的模型类
public class Person
public int id get; set;
public string FirstName get; set;
public string LastName get; set;
public string Email get; set;
public string PhoneNumber get; set;
public string Fullinfo
get
return FirstName + " " + LastName + " " + Email;
这里是主类
public partial class DashBoard : Form
List<Person> persons =new List<Person>();
public DashBoard()
InitializeComponent();
Updated();
public void Updated()
PeopleFoundListbox.DataSource = persons;
PeopleFoundListbox.DisplayMember = "Fullinfo";
public void Searchpeoplebutton_Click(object sender, EventArgs e)
persons = Getpeople(Lastnametextbox.Text);
Updated();
public List<Person> Getpeople(string searchname)
using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.Cnn("peopleDb")))
var output = connection.Query<Person>("select * from People where Lastname= " + searchname).ToList();
return output;
我想根据姓氏选择记录 我有一行以 david 作为姓氏,但是当我在文本框中输入 david 并进行搜索时,我会收到此错误
无效的列名大卫
【问题讨论】:
SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables 【参考方案1】:你忘记了单引号。
要添加到 GMB 的答案以防止 SQL 注入,您可以使用匿名变量:
var output = connection.Query<Person>(
"select * from People where Lastname= @lastname", new lastname = lastnamevariable
).ToList();
【讨论】:
【参考方案2】:基本上,您的查询缺少搜索名称周围的单引号。
这个:
var output = connection.Query<Person>(
"select * from People where Lastname= " + searchname
).ToList();
应该是:
var output = connection.Query<Person>(
"select * from People where Lastname= '" + searchname + "'"
).ToList();
在没有单引号的情况下,SQL Server 将文字字符串视为列名,因此您收到的错误。
【讨论】:
这为sql注入创造了可能性。使用参数:learndapper.com/parameters以上是关于选择语句:列名无效,在 C# 中使用 Dapper的主要内容,如果未能解决你的问题,请参考以下文章