我是C#的新手并拥有SQL背景,所以如果这是一个非常愚蠢的查询,我会道歉,但我现在已经拖网谷歌约2个小时,但找不到我需要的东西。如果有人知道他们可以指向我的文章,那就太好了。
我有一个简单的Windows窗体应用程序,我正在设置一个登录框,以便用户必须输入他们的用户ID才能继续。
我有一个带有下表的SQL Server数据库(SQL 2005):
用户 UserID(int); userName nvarchar(50)
我正在使用Visual Studio 2010
我遇到的问题是如何检查他们的用户ID是否存在于我的SQL表中(称为用户...)我不会在这里放任何代码,因为它已经从头开始重写了很多次干净石板可能是最好的!
理想情况下,我希望用户输入他们的用户ID,然后点击“登录”。当他们这样做时,如果他们的userID在DB表中无效,那么我需要它来给出错误msgBox;如果它是有效的,那么它应该记录它们,将它们的userID和userName(存储在DB表中)传递给一个变量,我可以在应用程序的其他地方使用它来填充字段。
我希望这是有道理的,而且我确信我错过了那些能够解释这一切的完美文章 - 希望你们中的一个人能指出我正确的方向!
谢谢
答案 0 :(得分:1)
您应该使用用户输入的用户ID进行简单的SQL查询,例如
从userID = value的用户中选择UserID。 executeNonQuery()将返回匹配数。如果返回值== 1,则表示该用户标识存在于数据库中。如果返回值与1不同,则表示userid不存在或已多次注册。所以,如果是1然后你可以调用另一个表单来制作不同的东西,否则你调用anoter表单或输出带有错误消息的消息框
答案 1 :(得分:1)
/*table code
* create table login
(
id varchar(25),
pass varchar(25)
)
*
*
*
*
*/
string Connectstring = @"Data Source=DELL-PC;Initial Catalog=stud;Integrated Security=True";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(Connectstring);
cn.Open();
SqlCommand cmd = new SqlCommand("select * from log where id=@a and pass=@b", cn);
cmd.Parameters.AddWithValue("@a", textBox1.Text.ToString().ToUpper());
cmd.Parameters.AddWithValue("@b", textBox2.Text);
SqlDataReader dr = cmd.ExecuteReader();
if ((dr.Read() == true))
{
MessageBox.Show("The user is valid!");
Form2 mainForm = new Form2();
mainForm.Show();
this.Hide();
}
else
{
MessageBox.Show("Invalid username or password!");
}
}
答案 2 :(得分:0)
声明您的数据库的连接字符串
string connString = @"Data Source=.\SQLEXPRESS;Initial Catalog=YourDatabase;Integrated Security=True";
之后您可以使用下面的验证方法
private bool ValidateUserById(string connString, int id)
{
using (var conn = new SqlConnection(connString))
{
conn.Open();
var sqlString = string.Format("Select * From Users where Id = {0}", id);
using (var cmd = new SqlCommand(sqlString, conn))
{
return cmd.ExecuteScalar() != null;
}
}
}
然后点击按钮您可以检查用户
if (ValidateUserById(connString, Convert.ToInt32(textBox1.Text)))
{
//..
}
else
{
//..
}