0

SQL server2008r2 で既に作成されている DB からデータを取得する ac# Windows フォーム アプリを作成しています。私のアプリには 2 つの勝利フォームがあります。1 つ目はログインの詳細を取得するためのもので、2 つ目は特定のユーザー ID とパスワードに関連するデータを表示するためのものです。2 番目のフォームにデータを取得できません。これは私のコードです:

** * ****第 1 形態* ** *

 public partial class FormLog_in : Form
 {
    SqlConnection con = new SqlConnection("Data source=CHINTHAK-PC ; Initial Catalog=FlintecTest; Integrated Security = yes;");
    SqlDataAdapter da = new SqlDataAdapter();
    SqlCommand cmd = new SqlCommand();

    public FormLog_in()
    {
        InitializeComponent();
    }

    private void btnLogIn_Click(object sender, EventArgs e)
    {
        if (!(string.IsNullOrEmpty(txtUserName.Text)) && !(string.IsNullOrEmpty(txtPassword.Text)))
        {
            con.Open();
            string query = "SELECT count(*) FROM LogIn  WHERE UesrName=@1 AND PassWord=@2 ";
            cmd = new SqlCommand(query, con);
            cmd.Parameters.Add("@1", SqlDbType.NVarChar).Value = txtUserName.Text;
            cmd.Parameters.Add("@2", SqlDbType.NVarChar).Value = txtPassword.Text;
            int count = Convert.ToInt32(cmd.ExecuteScalar());
            con.Close();

            if (count > 0)
            {
                MessageBox.Show("Valid Username and Password");
                Welcome f1 = new Welcome();
                f1.Show();

            }
            else
                MessageBox.Show("Invalid Username or Password try again");
        }

* ****第二形態* *

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"));
    }
}
4

3 に答える 3

1

パラメータを受け取るように、ウェルカム フォームのコンストラクタを変更してみませんか。

 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;
于 2013-05-15T11:29:00.433 に答える
0

もちろん、そうではないため、2番目の形式でデータベースからデータを取得することはできません

1- x および y パラメータを 2 番目のフォームに送信しなかった

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();
}

フォーム 2 で

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"));
}
于 2013-05-15T11:46:49.473 に答える
0

コンストラクタを使用して問題を解決できます

「ログイン」ボタンを押すと(あると仮定して)、次のことができます。

private void login_Click(object sender, System.EventArgs e)
{
    Form2 frm=new Form2(userName.text,password.tex);
    frm.Show();
}

2 番目のフォーム コンストラクターは次のようになります。

public Form2(string user, string pass)
{
  InitializeComponent(); 
  //Save your parameters here so you can use them with the query
}

これを行う方法は他にもあります。http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms

于 2013-05-15T11:26:43.073 に答える