Hi my name is vishal for past 7-10 days i have been thinking/breaking my head on how to pass value of variable from datareader execution of one form to another form which inserts that value to a table in sql server 2008 in c# windows forms?
So i am developing an application named:Mini Project,which has a login form named:frmLogin,which also has a mdi parent form named:MDIParent1.Mdi parent form(MDIParent1) also has child forms.
Given below is my c# code of login form(frmLogin):
namespace Mini_Project { public partial class frmLogin : Form { public int mid; public int uid = 0; public frmLogin() { InitializeComponent(); } private void frmLogin_Load(object sender, EventArgs e) { } private bool ManagerUser(string username, string password) { bool success = false; SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Task;Integrated Security=true"); if (conn.State != ConnectionState.Open) { conn.Open(); } SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd = new SqlCommand("Select manager_id,manager_first_name from [dbo].[ManagerDetail2] where username='"+txtUsername.Text+"' and password='"+txtPassword.Text+"' and LoginAttempts< 3", conn); SqlDataReader rd = cmd.ExecuteReader(); while(rd.Read()) { success=true; Module.Instance.Manager = Convert.ToInt32(rd[0].ToString()); Module.Instance.GlobalManager = rd[1].ToString(); } rd.Close(); conn.Close(); return success; } private bool ValidateUser(string username, string password) { bool success = false; SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Task;Integrated Security=true"); if (conn.State != ConnectionState.Open) { conn.Open(); } SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd = new SqlCommand("Select * from [dbo].[UserDetail2] where username='"+txtUsername.Text+"' and password='"+txtPassword.Text+"' and LoginAttempts< 3", conn); SqlDataReader rd = cmd.ExecuteReader(); while(rd.Read()) { success=true; Module.Instance.User = Convert.ToInt32(rd[0].ToString()); Module.Instance.GlobalUser = rd[1].ToString(); } rd.Close(); conn.Close(); return success; } private void btnLogin_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Task;Integrated Security=true"); if (conn.State != ConnectionState.Open) { conn.Open(); } SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; if ((txtPassword.Text == "password") && (txtUsername.Text.ToLower() == "admin")) { Module.Instance.Admin = 1; MDIParent1 h = new MDIParent1(); h.Show(); this.Close(); } else { string username = txtUsername.Text; string password = txtPassword.Text; bool validUser = ValidateUser(username, password); bool validmanager = ManagerUser(username, password); if (validUser) { uid = 0; string name = ("Select user_first_name,user_last_name,user_id from [dbo].[UserDetail2] where username='" + txtUsername.Text + "'"); cmd = new SqlCommand(name); cmd.Connection = conn; cmd.CommandType = CommandType.Text; SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { name = dr[0].ToString() + " " + dr[1].ToString()+System.Environment.NewLine+dr[2].ToString(); uid = Convert.ToInt32(dr[2].ToString()); } dr.Close(); cmd = new SqlCommand("Update [dbo].[UserDetail2] set LoginAttempts=0 where username='" + txtUsername.Text + "'", conn); cmd.ExecuteNonQuery(); frmUser u = new frmUser(); Module.Instance.User =u.autoGenId; MDIParent1 m = new MDIParent1(); m.Show(); this.Close(); } if (validmanager) { string manager = ("Select manager_first_name,manager_last_name,manager_id from [dbo].[ManagerDetail2] where username='" + txtUsername.Text + "'"); cmd = new SqlCommand(manager); cmd.Connection = conn; cmd.CommandType = CommandType.Text; SqlDataReader fr = cmd.ExecuteReader(); while (fr.Read()) { manager = fr[0].ToString() + " " + fr[1].ToString()+System.Environment.NewLine+fr[2].ToString(); mid = Convert.ToInt32(fr[2].ToString()); } fr.Close(); cmd = new SqlCommand("Update [dbo].[ManagerDetail2] set LoginAttempts=0 where username='" + txtUsername.Text + "'", conn); cmd.ExecuteNonQuery(); frmManager y=new frmManager(); Module.Instance.Manager =y.bGenId; MDIParent1 g = new MDIParent1(); g.Show(); this.Close(); } else { cmd = new SqlCommand("Update [dbo].[UserDetail2] set LoginAttempts=LoginAttempts+1 where username='" + txtUsername.Text + "'", conn); cmd.ExecuteNonQuery(); cmd = new SqlCommand("Update [dbo].[ManagerDetail2] set LoginAttempts=LoginAttempts+1 where username='" + txtUsername.Text + "'", conn); cmd.ExecuteNonQuery(); MessageBox.Show("Invalid user name or password. Please try tomorow ", "Task", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtUsername.Focus(); } } } private void btnCancel_Click(object sender, EventArgs e) { Application.Exit(); }
The above code works fine! As you can see i login/enter into application(Mini Project) as aadmin using default username:admin and default password:password.
Given below is c# code of class named:Module:
namespace Mini_Project { public sealed class Module { private static readonly Module _instance = new Module(); public static Module Instance { get { return _instance; } } public int Admin { get; set; } public int User { get; set; } public int Manager { get; set; } public string GlobalUser { get; set; } public string GlobalManager { get; set; } public string GlobalAdmin { get; set; } } }
The above code works to some extent only!
So as a admin i create manager for tasks.Given below is c# code of form(frmManager) through which i create manager for tasks and also insert values into table:ManagerDetail2 in sql server 2008 through c# windows forms:
namespace Mini_Project { public partial class frmManager : Form { public int bGenId = -1; public frmManager() { InitializeComponent(); } private void frmManager_Load(object sender, EventArgs e) { dtDOB.MaxDate = dtDOB.Value.AddYears(-30); } private void btnCreate_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Task;Integrated Security=true"); if (conn.State != ConnectionState.Open) { conn.Open(); } SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd = new SqlCommand("Insert into [dbo].[ManagerDetail2](manager_first_name,manager_last_name,manager_dob,manager_sex,email,username,password,status,created_by,LoginAttempts,row_upd_date)" + "Values(@manager_first_name,@manager_last_name,@manager_dob,@manager_sex,@email,@username,@password,@status,@created_by,@LoginAttempts,GetDate()); Select @autoGenId=SCOPE_IDENTITY();", conn); cmd.Parameters.AddWithValue("@manager_first_name", txtFName.Text); cmd.Parameters.AddWithValue("@manager_last_name", txtLName.Text); cmd.Parameters.AddWithValue("@manager_dob", dtDOB.Value); if (cboSex.SelectedIndex == 0) { cmd.Parameters.AddWithValue("@manager_sex", "Male"); } else if (cboSex.SelectedIndex == 1) { cmd.Parameters.AddWithValue("@manager_sex", "Female"); } else if (cboSex.SelectedIndex == 2) { cmd.Parameters.AddWithValue("@manager_sex", "Transgender"); } cmd.Parameters.AddWithValue("@email", txtEmailID.Text); cmd.Parameters.AddWithValue("@username", txtUsername.Text); cmd.Parameters.AddWithValue("@password", txtPassword.Text); cmd.Parameters.AddWithValue("@status", 1); cmd.Parameters.AddWithValue("@Created_by", 1); cmd.Parameters.AddWithValue("@LoginAttempts", 0); cmd.Parameters.Add("@autoGenId", SqlDbType.Int).Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); bGenId = Convert.ToInt32(cmd.Parameters["@autoGenId"].Value); cmd = new SqlCommand("Update [dbo].[ManagerDetail2] set LoginAttempts=0 where username='" + txtUsername.Text + "'", conn); cmd.ExecuteNonQuery(); ((MDIParent1)this.MdiParent).updateUserActivities(bGenId, 2, txtFName.Text.ToString() + "Manager detail was added successfully"); MessageBox.Show("Manager Detail was added successfully", "Task", MessageBoxButtons.OK, MessageBoxIcon.Information); conn.Close(); this.Close(); }
The above code works fine with no problems at all!
Given below is structure of table:ManagerDetail2 in sql server 2008:
ColumnName DataType AllowNulls
manager_id(auto-increment primary key) Int No
manager_first_name nvarchar(50) Yes
manager_last_name nvarchar(50) Yes
manager_dob date Yes
manager_sex nvarchar(20) Yes
email nvarchar(60) Yes
username nvarchar(25) Yes
password nvarchar(15) Yes
status bit Yes
created_by Int Yes
LoginAttempts Int Yes
row_upd_date datetime Yes
So using username and password from table:ManagerDetail2 i enter/login into application asmanager(each manager has different manager_id as field:manager_id in table:ManagerDetail2 is auto-increment primary key),create/add new users to application who will come under me/that particular manager only!
Given below is c# code of login form(frmLogin) of how i get value ofmanager_id of currently logged in/entered manager of application:
namespace Mini_Project { public partial class frmLogin : Form { public int mid; public frmLogin() { InitializeComponent(); } private void frmLogin_Load(object sender, EventArgs e) { } private bool ManagerUser(string username, string password) { bool success = false; SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Task;Integrated Security=true"); if (conn.State != ConnectionState.Open) { conn.Open(); } SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd = new SqlCommand("Select manager_id,manager_first_name from [dbo].[ManagerDetail2] where username='"+txtUsername.Text+"' and password='"+txtPassword.Text+"' and LoginAttempts< 3", conn); SqlDataReader rd = cmd.ExecuteReader(); while(rd.Read()) { success=true; Module.Instance.Manager = Convert.ToInt32(rd[0].ToString()); Module.Instance.GlobalManager = rd[1].ToString(); } rd.Close(); conn.Close(); return success; } private void btnLogin_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Task;Integrated Security=true"); if (conn.State != ConnectionState.Open) { conn.Open(); } SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; if ((txtPassword.Text == "password") && (txtUsername.Text.ToLower() == "admin")) { Module.Instance.Admin = 1; MDIParent1 h = new MDIParent1(); h.Show(); this.Close(); } else { string username = txtUsername.Text; string password = txtPassword.Text; bool validmanager = ManagerUser(username, password); if (validmanager) { string manager = ("Select manager_first_name,manager_last_name,manager_id from [dbo].[ManagerDetail2] where username='" + txtUsername.Text + "'"); cmd = new SqlCommand(manager); cmd.Connection = conn; cmd.CommandType = CommandType.Text; SqlDataReader fr = cmd.ExecuteReader(); while (fr.Read()) { manager = fr[0].ToString() + " " + fr[1].ToString()+System.Environment.NewLine+fr[2].ToString(); mid = Convert.ToInt32(fr[2].ToString()); } fr.Close(); cmd = new SqlCommand("Update [dbo].[ManagerDetail2] set LoginAttempts=0 where username='" + txtUsername.Text + "'", conn); cmd.ExecuteNonQuery(); MDIParent1 g = new MDIParent1(); g.Show(); this.Close(); } else { cmd = new SqlCommand("Update [dbo].[ManagerDetail2] set LoginAttempts=LoginAttempts+1 where username='" + txtUsername.Text + "'", conn); cmd.ExecuteNonQuery(); MessageBox.Show("Invalid user name or password. Please try tomorow ", "Task", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtUsername.Focus(); } }
As you can see variable named:mid in login form(frmLogin) containsmanager_id of currently logged in manager/entered manager of application(Mini Project) using datareader(named:fr) execution of sqlcommand(named:cmd) in function(validmanager) of btnLogin of login form(frmLogin).
So using username and password from table:ManagerDetail2,i enter/login into application as amanager,create new users to application who will come under me/that particular manager only.Given below is c# code of form(frmUser) through which i create new users to application and also insert values into table:UserDetail2:
namespace Mini_Project { public partial class frmUser : Form { public int autoGenId = -1; int man; public frmUser() { InitializeComponent(); frmLogin j = new frmLogin(); j.mid = man; } private void btnCreate_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Task;Integrated Security=true"); if (conn.State != ConnectionState.Open) { conn.Open(); } SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd = new SqlCommand("Insert into [dbo].[UserDetail2](user_first_name,user_last_name,user_dob,user_sex,email,username,password,status,row_upd_date,created_by,LoginAttempts)" + "Values(@user_first_name,@user_last_name,@user_dob,@user_sex,@email,@username,@password,@status,GetDate(),@created_by,@LoginAttempts); Select @autoGenId=SCOPE_IDENTITY();", conn); cmd.Parameters.AddWithValue("@user_first_name", txtFName.Text); cmd.Parameters.AddWithValue("@user_last_name", txtLName.Text); cmd.Parameters.AddWithValue("@user_dob", dtDOB.Value); if (cboSex.SelectedIndex == 0) { cmd.Parameters.AddWithValue("@user_sex", "Male"); } else if (cboSex.SelectedIndex == 1) { cmd.Parameters.AddWithValue("@user_sex", "Female"); } else if (cboSex.SelectedIndex == 2) { cmd.Parameters.AddWithValue("@user_sex", "Transgender"); } cmd.Parameters.AddWithValue("@email", txtEmailID.Text); cmd.Parameters.AddWithValue("@username", txtUsername.Text); cmd.Parameters.AddWithValue("@password", txtPassword.Text); cmd.Parameters.AddWithValue("@status", 1); cmd.Parameters.AddWithValue("@created_by",man); cmd.Parameters.AddWithValue("@LoginAttempts", 0); cmd.Parameters.Add("@autoGenId", SqlDbType.Int).Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); autoGenId = Convert.ToInt32(cmd.Parameters["@autoGenId"].Value); cmd = new SqlCommand("Update [dbo].[UserDetail2] set LoginAttempts=0 where username='" + txtUsername.Text + "'", conn); cmd.ExecuteNonQuery(); ((MDIParent1)this.MdiParent).updateUserActivities(autoGenId, 1, txtFName.Text + "User detail was added successfully"); MessageBox.Show("User Detail was added successfully", "Task", MessageBoxButtons.OK, MessageBoxIcon.Information); conn.Close(); this.Close(); }
The program executes well some extent only! The problem i am facing is every i execute the program,i am getting value as0 in field:created_by in table:UserDetail2 for all users,even though each user is created by different manager!
Given below is structure of table:UserDetail2 in sql server 2008:
ColumnName
DataType AllowNulls
user_id(auto-increment primary key) Int No
user_first_name nvarchar(50) Yes
user_last_name nvarchar(50) Yes
user_dob date Yes
user_sex nvarchar(20) Yes
email nvarchar(60) Yes
username nvarchar(25) Yes
password nvarchar(15) Yes
status bit Yes
created_by Int Yes
LoginAttempts Int Yes
row_upd_date datetime Yes
What i want is value of variable mid(in login form(frmLogin) which contains value ofmanager_id of currently logged in manager of application(in datareader execution of sql command of functionvalidManager() in btnLogin of login form(frmLogin) to be passed to value of field:created_by in table:UserDetail2 upon creation of new user by that particular manager.
Given below is c# code of mdi parent form(MDIParent1):
namespace Mini_Project { public partial class MDIParent1 : Form { public MDIParent1() { InitializeComponent(); if (Module.Instance.Admin == 1) { addNewTaskToolStripMenuItem.Enabled = true; addUserToolStripMenuItem1.Enabled = true; addManagerToolStripMenuItem.Enabled = true; addTaskToolStripMenuItem.Enabled = true; exitToolStripMenuItem.Enabled = true; checkInUserToolStripMenuItem.Enabled = false; tasksToolStripMenuItem.Enabled = true; optionsToolStripMenuItem.Enabled = true; pendingTaksToolStripMenuItem.Enabled = true; completedTasksToolStripMenuItem.Enabled = true; } frmManager m = new frmManager(); if (Module.Instance.Manager==m.bGenId) { addUserToolStripMenuItem1.Enabled = false; addManagerToolStripMenuItem.Enabled = true; addNewTaskToolStripMenuItem.Enabled = false; addTaskToolStripMenuItem.Enabled = true; exitToolStripMenuItem.Enabled = true; checkInUserToolStripMenuItem.Enabled = false; tasksToolStripMenuItem.Enabled = true; optionsToolStripMenuItem.Enabled = true; pendingTaksToolStripMenuItem.Enabled = true; completedTasksToolStripMenuItem.Enabled = true; } frmUser t = new frmUser(); if (Module.Instance.User == t.autoGenId) { addManagerToolStripMenuItem.Enabled = false; addUserToolStripMenuItem1.Enabled = false; addNewTaskToolStripMenuItem.Enabled = false; addTaskToolStripMenuItem.Enabled = false; exitToolStripMenuItem.Enabled = true; checkInUserToolStripMenuItem.Enabled = true; tasksToolStripMenuItem.Enabled = false; optionsToolStripMenuItem.Enabled = false; pendingTaksToolStripMenuItem.Enabled = false; completedTasksToolStripMenuItem.Enabled = false; } } public SqlConnectionStringBuilder connBuilder; public SqlConnection conn; private void MDIParent1_Load(object sender, EventArgs e) { connBuilder = new SqlConnectionStringBuilder(); connBuilder.InitialCatalog = "Task"; connBuilder.DataSource = "NPD-4\\SQLEXPRESS"; connBuilder.IntegratedSecurity = true; connBuilder.AsynchronousProcessing = true; conn = new SqlConnection(connBuilder.ToString()); conn.Open(); }
So my question is am i going in right track in terms of getting manager_id of currently entered/logged in manager in application?If so tell me what modifications must i need to do in my c# code and where to achieve my required result?
Can anyone help me please! Can anyone help me/guide me to solve my problem! Any help/guidance in solving of this problem would be greatly appreciated!
vishal