我想将用户输入的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; }
}
答案 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
您无需手动打开连接。实体框架将为您做到这一点。所以你可以删除这一行:
con.Database.Connection.Open();