首页 > 解决方案 > C# SQL 传递变量进行查询

问题描述

我目前正在编写一个搜索功能来降低值名称

这是我的查询:

"SELECT Company.Name, Company.Reg FROM Company WHERE Name LIKE '%''" + Name + "''%'";

这是功能:

public object CompanySearch(string Name)
        {
            using (PCE)
            {
                SqlConnection con = new SqlConnection(constr);
                try
                {
                    List<CompanySearch> cm = new List<CompanySearch>();
                    SqlCommand command = new SqlCommand();
                    command.Connection = con;
                    "SELECT Company.Name, Company.Reg FROM Company WHERE Name LIKE '%''" + Name + "''%'";
                    con.Open();
                    //process the sql execute etc
                }
            }
        }

我阅读名称的方式是否正确?

我没有进行测试' ',但是我收到如下异常消息:

"ExceptionMessage": "Incorrect syntax near 'Mysearch'.",

更新

SELECT Company.Name, Company.Reg
FROM Company
WHERE CompanyName LIKE '%MySearch%';

这是我在 SSMS 中执行的代码,它成功了。但是它不适用于我的 C#

标签: c#sql

解决方案


首先,您应该始终避免“手动构建”您自己的查询。这是进行 SQL 注入的最佳方式 ( https://en.wikipedia.org/wiki/SQL_injection )

其次,您应该在查询中使用 Parameter

SqlCommand cmd = new SqlCommand("SELECT Company.Name, Company.Reg WHERE Name LIKE @companyName", connection);
cmd.Parameters.Add("@companyName", SqlDbType.NVarChar).Value = Name;

但是在 2020 年,您应该使用 ORM 而不是构建自己的查询。这对于节省时间和避免错误要好得多。看看 EF Core ( https://docs.microsoft.com/fr-fr/ef/ ) 或 Dapper ( https://stackexchange.github.io/Dapper/ ), ...


推荐阅读