C# 有没有合适的方法从OLEDB连接中检索由特定字符串值搜索的数据?

C# 有没有合适的方法从OLEDB连接中检索由特定字符串值搜索的数据?,c#,sql-server,oledb,C#,Sql Server,Oledb,我想使用此查询从SQL Server检索一个类别。我在数据库中有数据,该查询在SQL Server中运行良好。但当我将它与oledb命令一起使用时,它不会从服务器返回任何数据。有什么问题吗 public Category GetCategoryByCategoryName(string categoryName) { Category _category = null; using (OleDbConnection con = new OleDbConnection(_conn

我想使用此查询从SQL Server检索一个类别。我在数据库中有数据,该查询在SQL Server中运行良好。但当我将它与oledb命令一起使用时,它不会从服务器返回任何数据。有什么问题吗

public Category GetCategoryByCategoryName(string categoryName)
{
    Category _category = null;

    using (OleDbConnection con = new OleDbConnection(_connectionString))
    {
        string sql = "select * from Categories where CategoryName=?";

        OleDbCommand cmd = new OleDbCommand(sql, con);
        cmd.Parameters.AddWithValue("@cName", categoryName);

        try
        {
            con.Open();
            OleDbDataReader rdr = cmd.ExecuteReader();

            if (rdr.HasRows)
            {
                while (rdr.Read())
                {
                    _category.Id = Convert.ToInt32(rdr["Id"]);
                    _category.CategoryName = rdr["CategoryName"].ToString();
                }

                rdr.Close();
            }
        }
        catch (Exception ex)
        {
            _category = null;
        }
    }

    return _category;
}
我不知道“正确”的含义,但一个“好”的方法可能是安装代码并将其简化为:

    public Category GetCategoryByCategoryName(string categoryName)
    {
        using (OleDbConnection con = new OleDbConnection(_connectionString))
        {
            return con.QueryFirstOrDefault<Category>(
              "select * from Categories where CategoryName=?cn?",
              new { cn = categoryName }
            );
        }
    }
公共类别GetCategoryByCategoryName(字符串categoryName)
{
使用(OleDbConnection con=新OleDbConnection(_connectionString))
{
return con.QueryFirstOrDefault(
“从CategoryName=?cn的类别中选择*”,
新的{cn=categoryName}
);
}
}
参考资料:

我不知道“正确”是什么,但一个“好”的方法可能是安装并将代码缩减为:

    public Category GetCategoryByCategoryName(string categoryName)
    {
        using (OleDbConnection con = new OleDbConnection(_connectionString))
        {
            return con.QueryFirstOrDefault<Category>(
              "select * from Categories where CategoryName=?cn?",
              new { cn = categoryName }
            );
        }
    }
公共类别GetCategoryByCategoryName(字符串categoryName)
{
使用(OleDbConnection con=新OleDbConnection(_connectionString))
{
return con.QueryFirstOrDefault(
“从CategoryName=?cn的类别中选择*”,
新的{cn=categoryName}
);
}
}
参考资料: 它应该:
Category\u Category=new Category()
而不是:
Category\u Category=null

它应该:
Category\u Category=new Category()
而不是:

Category\u Category=null

显示有效的sql server查询、连接字符串和
categoryName
的值转储,从categoryName='Amonium'
所在的类别中选择*,它将从表中提取数据。如果是sql server,为什么在存在SqlCommand时使用OleDbCommand?这是连接字符串。这表明CategoryName不是有效字段。如果按照我的建议调用Read而不使用HasRows,是否会出现异常?显示有效的sql server查询、连接字符串和
categoryName
的值转储,从categoryName='Amonium'
中选择*并从表中提取数据。如果是sql server,存在SqlCommand时为什么使用OleDbCommand?这是连接字符串。这表明CategoryName不是有效字段。如果按照我的建议调用Read而不使用HasRows,是否会出现异常?