在if语句中添加简单引用

时间:2014-08-19 13:46:43

标签: c# sql entity-framework visual-studio null

我想将用户输入的UserName和Pass与我本地数据库进行比较。

当我尝试在我的数据库上请求时,我看到我必须在我的请求中加入简单的引号,例如

SELECT * FROM Administrator
WHERE UserName = 'FSelva';

问题是,当我检查数据库时,我这样做:

if((username == admin.UserName) && (password == admin.Pass))
        {
            this.Close();
            MainPage retourpageprincipale = new MainPage();
            retourpageprincipale.Show();
        }
        else
        {

Admin。****是数据库和用户名& password是捕获用户输入内容的变量。

当我一步一步地做,admin.UserName是Null,例如admin.Pass。

我认为添加简单的引用如:

if((username == "'" && admin.UserName && "'") && (password == "'" && admin.Pass && "'"))

可以解决我的问题。但我不能这样做。

有人知道这是什么语法吗?

编辑:

这是整个代码:

namespace WpfApplication3
{
    public partial class Window1 : Window
    {
        private Database1Entities1 conn = new Database1Entities1();
        public Window1()
        {
            InitializeComponent();
        }
        private void ConnectionClick(object sender, RoutedEventArgs e)
        {
            var username = UserNameBox.Text;
            var password = PasswordBox.Text;
            con.Database.Connection.Open();

            Administrator admin = new Administrator();

            if((username == admin.UserName) && (password == admin.Pass))
            {
                this.Close();
                MainPage retourpageprincipale = new MainPage();
                retourpageprincipale.Show();
            }
            else
            {
                MessageBox.Show("Combo Admin/Password non valide!
            }

管理员是我的管理员表:

public partial class Administrator
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public string Pass { get; set; }
    public bool IsSuperAdmin { get; set; }
}

当我逐步执行此代码时,请执行以下链接:

if((username == admin.UserName) && (password == admin.Pass))

用户名值是RSans(我写入IHM的内容) 密码valus是1234abcd(我写入IHM的内容) admin.UserName valus为Null admin.Pass是Null。

此外, admin值为WpfApplication3.Administrator conn值是WpfApplication3.Database1Entities1

如果您需要其他信息,我会再次编辑我的帖子。

EDIT2:

这是我的Database1Entities1完整代码:

namespace WpfApplication3
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
public partial class Database1Entities1 : DbContext
{
    public Database1Entities1()
        : base("name=Database1Entities1")
        {
        }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    public DBSet<Administrator> Administrator { get; set; }
}

1 个答案:

答案 0 :(得分:1)

代码中的问题在于从数据库中读取信息。如果两个admin。*属性都为null,则表示它们在数据库中为空或者您没有正确设置它们。 此外,您不需要简单的引号。它们在SQL中用于显示单元格是字符串类型。一旦您在C#中读取对象的信息,您将看到引号已消失。最简单的方法是调试代码并逐行执行以查看错误。

更新

由于您使用的是Entity Framework,因此以下是从数据库中检索信息的方法:

您的Database1Entities1就是所谓的DbContext。您可以使用它来查询数据库。它应该有一个属性Administrators。如果没有,您可以将以下部分添加到Database1Entities1类:

public DbSet<Administrator> Administrators { get; set; }

然后,您可以使用conn对象查询数据库,例如

var admin = conn.Administrators.SingleOrDefault(a => a.UserName == "FSelva");

由于您已经在查询数据库,因此可以一步添加整个检查(包括密码):

var admin = conn.Administrators.SingleOrDefault(a => a.UserName == "FSelva" && a.Password == "...");
// if there is no match, the admin object will be NULL here

更新2

您无需手动打开连接。实体框架将为您做到这一点。所以你可以删除这一行:

con.Database.Connection.Open();