此代码在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;
}
我得到了那个错误
答案 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
。