C# 使用winforms从SQL server 2008r2检索数据
我正在创建一个c#windows窗体应用程序,它将从sql Server 2008R2中已经创建的数据库中检索数据。我的应用程序中有两个win表单,第一个用于获取登录详细信息,第二个用于显示与给定用户名和密码相关的数据。我无法将数据传送到我的第二张表格。这是我的代码: ******第一表格******C# 使用winforms从SQL server 2008r2检索数据,c#,sql-server-2008,C#,Sql Server 2008,我正在创建一个c#windows窗体应用程序,它将从sql Server 2008R2中已经创建的数据库中检索数据。我的应用程序中有两个win表单,第一个用于获取登录详细信息,第二个用于显示与给定用户名和密码相关的数据。我无法将数据传送到我的第二张表格。这是我的代码: ******第一表格****** public partial class Welcome : Form { string query = null; SqlConnection con = new SqlCon
public partial class Welcome : Form
{
string query = null;
SqlConnection con = new SqlConnection("Data source=CHINTHAK-PC ; Initial Catalog=FlintecTest; Integrated Security = yes;");
SqlDataAdapter da = new SqlDataAdapter();
BindingSource userTable = new BindingSource();
DataSet ds = new DataSet();
public Welcome()
{
InitializeComponent();
}
private void Welcome_Load(object sender, EventArgs e)
{
query = "SELECT * FROM Users WHERE UserName=@x AND Users.Password=@y ";//x should be given username by current login
da.SelectCommand = new SqlCommand(query, con); //y should be given password by current login
ds.Clear();
da.Fill(ds, "usr");
userTable.DataSource = ds.Tables["usr"];
txtFristName.DataBindings.Add(new Binding("Text", userTable, "FirstName"));
txtLastName.DataBindings.Add(new Binding("Text", userTable, "LastName"));
txtAddress.DataBindings.Add(new Binding("Text", userTable, "Address"));
txtTelephone.DataBindings.Add(new Binding("Text", userTable, "Telephone"));
txtEmail.DataBindings.Add(new Binding("Text", userTable, "Email"));
txtFax.DataBindings.Add(new Binding("Text", userTable, "Fax"));
txtSection.DataBindings.Add(new Binding("Text", userTable, "Section"));
txtPosition.DataBindings.Add(new Binding("Text", userTable, "Position"));
}
}
******第二版***
public partial class Welcome : Form
{
string query = null;
SqlConnection con = new SqlConnection("Data source=CHINTHAK-PC ; Initial Catalog=FlintecTest; Integrated Security = yes;");
SqlDataAdapter da = new SqlDataAdapter();
BindingSource userTable = new BindingSource();
DataSet ds = new DataSet();
public Welcome()
{
InitializeComponent();
}
private void Welcome_Load(object sender, EventArgs e)
{
query = "SELECT * FROM Users WHERE UserName=@x AND Users.Password=@y ";//x should be given username by current login
da.SelectCommand = new SqlCommand(query, con); //y should be given password by current login
ds.Clear();
da.Fill(ds, "usr");
userTable.DataSource = ds.Tables["usr"];
txtFristName.DataBindings.Add(new Binding("Text", userTable, "FirstName"));
txtLastName.DataBindings.Add(new Binding("Text", userTable, "LastName"));
txtAddress.DataBindings.Add(new Binding("Text", userTable, "Address"));
txtTelephone.DataBindings.Add(new Binding("Text", userTable, "Telephone"));
txtEmail.DataBindings.Add(new Binding("Text", userTable, "Email"));
txtFax.DataBindings.Add(new Binding("Text", userTable, "Fax"));
txtSection.DataBindings.Add(new Binding("Text", userTable, "Section"));
txtPosition.DataBindings.Add(new Binding("Text", userTable, "Position"));
}
}
您可以使用构造函数来解决您的问题 当您点击“登录”按钮(假设有一个)时,您可以:
private void login_Click(object sender, System.EventArgs e)
{
Form2 frm=new Form2(userName.text,password.tex);
frm.Show();
}
您的第二个表单构造函数可以是:
public Form2(string user, string pass)
{
InitializeComponent();
//Save your parameters here so you can use them with the query
}
还有其他方法可以做到这一点 为什么不在欢迎表单中更改构造函数以接收参数呢
public Welcome(String usr, String pword)
{
InitializeComponent();
this.Username=usr;
this.Password=pword; // you should have a form of encryption for your password
}
因此,当你打电话时,你会:
Welcome f1 = new Welcome(txtUsername.Text,txtPassword.Text);
然后在欢迎表单中添加属性,如:
private String Username { get; set; }
private String Password { get; set; }
然后在欢迎表单加载中添加2个参数:
cmd.Parameters.Add("@x", SqlDbType.NVarChar).Value = Username;
cmd.Parameters.Add("@y", SqlDbType.NVarChar).Value = Password;
当然,您不能以第二种形式从数据库检索数据,因为您不是 1-您没有将x和y参数发送到第二个表单
Form2 frm = new Form2(userName.text,password.tex);
frm.Show();
2-必须将x和y传递给SqlCommand
中的查询并执行查询
query = "SELECT * FROM Users WHERE UserName='"+ x +"'AND Password='"+y+"'";
最终代码
在表格一中
if (count > 0)
{
MessageBox.Show("Valid Username and Password");
Welcome f1 = new Welcome( txtUserName.Text,txtPassword.Text);
f1.Show();
}
格式二
string x, y;
public Welcome(String usr, String pword)
{
InitializeComponent();
x = usr; y = pword;
}
private void Welcome_Load(object sender, EventArgs e)
{
query = "SELECT * FROM Users WHERE UserName='"+ x +"'AND Password='"+y+"'";
cmd.SelectCommand = new SqlCommand(query ,con);
ds.Clear();
cmd.Fill(ds);
userTable.DataSource = ds.Tables[0];
txtFristName.DataBindings.Add(new Binding("Text", userTable, "FirstName"));
txtLastName.DataBindings.Add(new Binding("Text", userTable, "LastName"));
txtAddress.DataBindings.Add(new Binding("Text", userTable, "Address"));
txtTelephone.DataBindings.Add(new Binding("Text", userTable, "Telephone"));
txtEmail.DataBindings.Add(new Binding("Text", userTable, "Email"));
txtFax.DataBindings.Add(new Binding("Text", userTable, "Fax"));
txtSection.DataBindings.Add(new Binding("Text", userTable, "Section"));
txtPosition.DataBindings.Add(new Binding("Text", userTable, "Position"));
}
您没有使用命令为第二个添加参数Form@Mora-包含在
Welcome\u Load
中的查询不执行任何操作,因为参数列表为空。让我们来看看,你是用纯文本存储密码的,这是一个可怕的想法,不管它是用来做什么的。无论帐户用于何种用途,密码都应以纯文本形式存储。