C# 无效的列名| C

C# 无效的列名| C,c#,sql-server,database,database-connection,C#,Sql Server,Database,Database Connection,我试图弄明白如何用c从数据库中收集数据。 我被一个SQL命令卡住了,我真的不知道如何修复它。 我的错误是:列名无效 这是我的数据库: 这是我的连接类: namespace CarDAL { public class ConnectionClass { private string Connectionstring = "MYCONNECTIONSTRING"; public List<stri

我试图弄明白如何用c从数据库中收集数据。 我被一个SQL命令卡住了,我真的不知道如何修复它。 我的错误是:列名无效

这是我的数据库:

这是我的连接类:

namespace CarDAL
{
    public class ConnectionClass
    {
        private string Connectionstring =
            "MYCONNECTIONSTRING";


        public List<string> SoortSelectList(string KarakterSoort)
        {
            KarakterSoort = "Defensive";
            List<string> soortList = new List<string>();
            using (SqlConnection connection = new SqlConnection(Connectionstring))
            {
                connection.Open();

                using (SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.Karakter WHERE KarakterSoort = Defensive", connection))
                {
                    using (IDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            soortList.Add(dr.GetValue(0).ToString());
                            soortList.Add(dr.GetValue(1).ToString());

                        }
                    }
                }
            }

            return soortList;
        }
我想问题在哪里,但我不知道,也找不到解决问题的正确方法。

您的WHERE子句:

WHERE KarakterSoort = Defensive
将KarakterSoort列中的值与Defensive列中的值进行比较

这真的是你想要的吗

很可能,您希望与字符串文字进行比较,然后需要将其放入单引号中,如下所示:

WHERE KarakterSoort = 'Defensive'
现在,您正在选择KarakterSoort列包含值的所有行

或者,如果您希望将来与其他值进行比较,请在查询字符串中使用参数:

WHERE KarakterSoort = @DesiredValue
并宣布

cmd.Parameters.Add("@DesiredValue", SqlDbType.VarChar, 100);
并在运行命令之前设置其值:

cmd.Parameters["@DesiredValue"].Value = "Defensive";

谢谢,这很有帮助!如果它回答了这个问题,@Josselardinos,你应该将答案标记为解决方案。除了@marc_的答案之外……你传递了一个字符串KarakterSoort,然后你将字符串设置为防御性字符串……然后我认为你试图在选择字符串中使用该字符串。