无效的列名'True'错误,SQLException是caugh:“无效的列名'True'。”

时间:2014-05-03 19:02:58

标签: c# enums sqlexception

此代码在DBClass.cs

    public DataTable Fill(string sql, params SqlParameter[] prms)
            {
                SqlCommand cmd = new SqlCommand(sql, cnn);

                if (prms != null)
                {
                    cmd.Parameters.AddRange(prms);
                }

                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();

                try
                {
                    da.FillSchema(dt, SchemaType.Source);
                }
                catch (Exception hata)
                {
                    System.Windows.Forms.MessageBox.Show("Test");
                }

                da.Fill(dt);
                return dt;
            }
  

MainMenu.cs //这是主要部分,下方按钮表示新学生注册按钮

private void yeniÖğrenciKaydıToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (Yetki.YetkiVarmi(AnaMenu.Yonetici_id, Modul.ÖğrenciKaydı, YETKI.OKU) == true)
            {
                OgrenciKaydiOlustur ogrenciKayitFormunuGoster = new OgrenciKaydiOlustur();
                ogrenciKayitFormunuGoster.ShowDialog();
                ogrenciKayitFormunuGoster.Dispose();
            }
            else
            {
                MessageBox.Show("Yetkiniz Yok");
            }
        }

Yetki.cs // Yetki意味着许可

  

此模块包括菜单名称的应用   public enum Modul

    {
        ÖğrenciKaydı = 1,
        ÖğretmenKaydı = 2,
        DanışmanKaydı = 3,
        AşamaListesi = 4,
        ÖğrenciAşamaAtaması = 5,
        ÖğrenciListesiRaporu = 6,
        ÖğretmenListesiRaporu= 7,
        ÖdemeListesiRaporu = 8,
        Yetki=9,
        AnaEkran =10
    }
  

//这个枚举说,Ekle = Add,Guncelle = update,SIL = Delete,OKU = Read

public enum YETKI

    {
        EKLE,
        GUNCELLE,
        SIL,
        OKU
    }

public static bool YetkiVarmi(int Yonetici_id, Modul modul, YETKI yetki)
            {
                string sql = "SELECT * FROM YETKI WHERE " + yetki.ToString() + "=True ";
                sql += " AND YONETICI_ID=" + Yonetici_id + " AND MODUL_REFNO=" + Convert.ToInt32(modul);

                bool sonuc = false;

                DBClass db = new DBClass();
                DataTable dt = db.Fill(sql);

                if (dt.Rows.Count > 0)
                {
                    sonuc = true;
                }

                return sonuc;
            }
  

我得到了那个错误

1 个答案:

答案 0 :(得分:3)

TRUE是sql中的保留关键字,不用于布尔comaprisons。您应该将动态sql语句更改为:

 string sql = "SELECT * FROM YETKI WHERE @yetki=1 ";
       sql += " AND YONETICI_ID=@Yonetici_id AND MODUL_REFNO=@modul";

 ...

 DataTable dt = db.Fill(sql, new SqlParameter("@yetiki", yetki.ToString()), 
              new Sqlparameter("@Yonetici_id", Yonetici_id), 
              new SqlParameter("@modul", Convert.ToInt32(modul)))

假设yetki.ToString()代表的列的类型为bit