C# 将简单引号添加到if语句中
我想将用户输入的用户名和密码与本地数据库进行比较 当我试图在我的数据库上请求时,我发现我必须在请求中加入简单的引号,例如C# 将简单引号添加到if语句中,c#,sql,entity-framework,visual-studio,null,C#,Sql,Entity Framework,Visual Studio,Null,我想将用户输入的用户名和密码与本地数据库进行比较 当我试图在我的数据库上请求时,我发现我必须在请求中加入简单的引号,例如 SELECT * FROM Administrator WHERE UserName = 'FSelva'; 问题是,当我检查数据库时,我是这样做的: if((username == admin.UserName) && (password == admin.Pass)) { this.Close();
SELECT * FROM Administrator
WHERE UserName = 'FSelva';
问题是,当我检查数据库时,我是这样做的:
if((username == admin.UserName) && (password == admin.Pass))
{
this.Close();
MainPage retourpageprincipale = new MainPage();
retourpageprincipale.Show();
}
else
{
Admin.***是数据库变量,username和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!
}
其中Administrator是我的管理表:
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中写入的内容)
密码值为1234abcd(我在IHM中写入的内容)
admin.UserName值为空
admin.Pass为空
而且,
管理员值为WpfApplication3.Administrator
conn值为WPFAApplication3.Database1实体1
如果你需要其他信息,我会再次编辑我的帖子
编辑2:
这是我的数据库1实体1完整代码:
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; }
}
命名空间WpfApplication3
{
使用制度;
使用System.Data.Entity;
使用System.Data.Entity.Infrastructure;
公共部分类数据库1实体1:DbContext
{
公共数据库1实体1()
:base(“名称=数据库1实体1”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共数据库集管理员{get;set;}
}
代码中的问题在于从数据库中读取信息。如果两个admin.*属性都为null,则表示它们在数据库中为null,或者您没有正确设置它们。
此外,您不需要简单的引号。它们在SQL中用于显示单元格的类型为字符串。在C#中读取对象的信息后,您将看到引号消失了。调试代码和逐行查看错误是最简单的
更新
由于您使用的是实体框架,以下是如何从数据库检索信息:
您的Database1Entities1
就是所谓的DbContext。您可以使用它来查询数据库。它应该有一个属性Administrators
。如果没有,您可以将以下部分添加到Database1Entities1
类中:
public DbSet<Administrator> Administrators { get; set; }
由于您已经在查询数据库,您可以在一个步骤中添加整个检查(包括密码):
var admin = conn.Administrators.SingleOrDefault(a => a.UserName == "FSelva" && a.Password == "...");
// if there is no match, the admin object will be NULL here
更新2
您不需要手动打开连接。Entity Framework将为您执行此操作。因此您可以删除该行:
con.Database.Connection.Open();
您能显示创建admin对象的代码和进行数据库调用的代码吗?语法应该是a+,而不是&&,但这不应该解决这个问题。您想实现什么?此时
admin.UserName
是否应该为空?后期编辑,我想我已经回答了您的问题。@JohnSaunders:当我尝试不这样做时o Acrease是一个简单的管理员登录本地数据库。用户在基本IHM中输入用户名和密码,我检查用户名/密码是否存在于数据库中,如果存在,则登录。通常,这种比较将在数据库中进行,而不是在您的代码中。我理解您的意思,但是..当我打开服务器资源管理器并o“显示表格数据”在我的管理员表中,我看到了我之前输入的信息:用户名:FSelva Pass:abcd1234 issuepadmin:False和用户名:RSans Pass:1234abo issuepadmin:True我的表管理员不是空的。我理解简单的引号。所以我的问题不同:为什么我没有成功检查管理员的值。当我将它们与用户提示进行比较。您正在通过“Administrator admin=new Administrator();”创建管理员类的新实例。您需要做的不是此行,而是从数据库中读取信息。仅打开连接是不够的。如果您告诉我您使用的是哪种数据库技术(例如,实体框架),我可以为您提供一个小片段。非常感谢。我使用实体框架技术。我创建了一个名为Database1.mdf的基于服务的数据库,然后如果您需要任何其他信息,我创建了一个名为Model1.edmx的ADO.NET实体数据模型。Visual Studio告诉我:“找不到类型或命名空间名称'DbSet'。是否需要添加任何引用?请发布Database1Entities1类的完整代码。
con.Database.Connection.Open();