|
|
Rank: มือสมัครเล่น Groups: Member
Joined: 1/30/2008 Posts: 16
|
ดูให้หน่อยคะ ตรง LogLogIn คือ ตอน Login ต้องกรอก empUser & empPass
แล้วจะเก็บ Log ว่า empID อะไร โดยที่่ จะให้ empUser ที่กรอกเข้าไป ไปลิงค์หาว่าตรงกับ empID ไหน แบบนี้นะคะ
ไม่รู้ว่าโค้ดผิดตรงไหน รบกวนดูให้ทีคะ
|
|
Rank: มือสมัครเล่น Groups: Member
Joined: 1/30/2008 Posts: 16
|
private void bOk_Click(object sender, EventArgs e)
{
QueryString = new StringBuilder();
QueryString.Append("SELECT empUserName, empPassword, typeLevel FROM Employee");
QueryString.Append(" WHERE empUserName=@empUserName");
QueryString.Append(" AND empPassword=@empPassword");
string sqlLogin;
sqlLogin = QueryString.ToString();
com = new SqlCommand();
com.CommandText = sqlLogin;
com.CommandType = CommandType.Text;
com.Connection = Conn;
com.Parameters.Add("@empUserName", SqlDbType.VarChar).Value = this.empUserName.Text.Trim();
com.Parameters.Add("@empPassword", SqlDbType.Int).Value = Convert.ToInt32(this.empPassword.Text.Trim());
dr = com.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
LogLogIn();
if (Convert.ToString(dr["typelevel"]) == "1")
{
MessageBox.Show("กำลังเข้าสู่ระบบ คุณคือเลขานุการ");
fMain f = new fMain();
f.Show();
this.Hide();
}
else
{
MessageBox.Show("กำลังเข้าสู่ระบบ คุณคือพนักงาน");
fMain2 f = new fMain2();
f.Show();
this.Hide();
}
}
else
{
MessageBox.Show("ชื่อผู้ใช้ระบบ กับ รหัสผ่านผู้ใช้ระบบ ไม่ตรงกัน", "ผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Error);
empUserName.Text = "";
empUserName.Focus();
empPassword.Text = "";
}
dr.Close();
dr.Dispose();
}
|
|
Rank: มือสมัครเล่น Groups: Member
Joined: 1/30/2008 Posts: 16
|
private void LogLogIn()
{
com = new SqlCommand();
com.CommandType = CommandType.Text;
com.Connection = Conn;
DateTime SaveTime = DateTime.Now;
QueryString = new StringBuilder();
QueryString.Append("INSERT INTO LogFile (empID, activity, nTime) ");
QueryString.Append(" VALUES ( @empID, 'Login', @nTime) ");
QueryString.Append(" WHERE empID = @empUserName");
string sqlAdd;
sqlAdd = QueryString.ToString();
com.CommandText = sqlAdd;
com.CommandType = CommandType.Text;
com.Connection = Conn;
com.Parameters.Clear();
com.Parameters.Add("@empID", SqlDbType.Int).Value = this.empUserName.Text.Trim();
com.Parameters.Add("@nTime", SqlDbType.DateTime).Value = SaveTime;
}
|
|
Rank: มือพระกาฬ Groups: Member
Joined: 9/9/2008 Posts: 62
|
ใน LogLogIn()
ลองเพิ่ม com.ExecuteNonQuery(); ในบรรทัดสุดท้ายดูครับ น่าจะเป็นเพราะอันนี้
|
|
Rank: มือสมัครเล่น Groups: Member
Joined: 1/30/2008 Posts: 16
|
ถ้าเพิ่มไป มันจะบอก ERROR บอกว่า มีการ execute ไปแล้วรอบนึงนะคะ
ตอนไปใช้ตาราง
dr = com.ExecuteReader();
เนี้ยคะ
|
|
Rank: มือพระกาฬ Groups: Member
Joined: 9/9/2008 Posts: 62
|
ผมพอจะเข้าใจแล้ว คือตัวแปร Conn มันถูกใช้อยู่น่ะครับ ใน bOk_Click แล้วยังถูกใช้อีกทีใน LogLogIn
ให้คุณสร้าง connection ใหม่อีกตัวนึงใช้ใน LogLogIn ครับ
|
|
Rank: มือพระกาฬ Groups: Member
Joined: 9/9/2008 Posts: 62
|
แล้ว
ผมเจออีกอย่าง ใน LogLogIn()
ถ้าคุณใช้ INSERT INTO ... ต้องไม่มี WHERE ไม่งั้นจะผิดพลาดได้
|
|
Rank: มือสมัครเล่น Groups: Member
Joined: 1/30/2008 Posts: 16
|
ลืมลบออกคะ ปกติก้อไม่เอา where แล้วนะ แง่วๆ
เป็นเหมือนเดิม ทำยังไงดีคะ มันว่า execute ไปแล้วรอบนึง ต้องปิด แล้วสั่งเปิดไม่ได้ เด่วมันไม่เข้ากดcondition
private void LogLogIn()
{
com = new SqlCommand();
com.CommandType = CommandType.Text;
com.Connection = Conn;
DateTime SaveTime = DateTime.Now;
QueryString = new StringBuilder();
QueryString.Append("INSERT INTO LogFile (empUserName, activity, nTime) ");
QueryString.Append(" VALUES ( @empUserName, 'ล็อคอิน' , @nTime) ");
string sqlAdd;
sqlAdd = QueryString.ToString();
com.CommandText = sqlAdd;
com.CommandType = CommandType.Text;
com.Connection = Conn;
com.Parameters.Clear();
com.Parameters.Add("@empUserName", SqlDbType.Int).Value = this.empUserName.Text.Trim();
com.Parameters.Add("@nTime", SqlDbType.DateTime).Value = SaveTime;
com.ExecuteNonQuery();
}
|
|
Rank: มือพระกาฬ Groups: Member
Joined: 9/9/2008 Posts: 62
|
คือ ตัว Conn มันกำลังถูกใช้อยู่อ่ะครับที่ bOk_Click() พอคุณจะเรียกใช้อีกครั้งในLogLogIn() มันก็เลย error
ต้องสร้างใหมอีกอันนึง ให้ของใครของมันไปเลยครับ

|
|
Rank: มือสมัครเล่น Groups: Member
Joined: 1/30/2008 Posts: 16
|
ทีแรก มี
SqlConnection Conn;
SqlCommand com;
StringBuilder QueryString;
SqlDataReader dr;
แล้วเพิ่ม
SqlConnection Conn;
SqlConnection Conn2;
SqlCommand com;
StringBuilder QueryString;
SqlDataReader dr;
// เปลี่ยน ที่ตามบอกนะคะ
com = new SqlCommand();
DateTime SaveTime = DateTime.Now;
QueryString = new StringBuilder();
QueryString.Append("INSERT INTO LogFile (empUserName, activity, nTime) ");
QueryString.Append(" VALUES ( @empUserName, 'ล็อคอิน' , @nTime) ");
string sqlAdd;
sqlAdd = QueryString.ToString();
com.CommandText = sqlAdd;
com.CommandType = CommandType.Text;
com.Connection = Conn2;
com.Parameters.Clear();
com.Parameters.Add("@empUserName", SqlDbType.Int).Value = this.empUserName.Text.Trim();
com.Parameters.Add("@nTime", SqlDbType.DateTime).Value = SaveTime;
com.ExecuteNonQuery();
มันก็ยังขึ้น ERROR ตอนรันกดเลยว่า
Field 'Project1.fLogin.Conn2' is never assigned to, and will always have its default value null
ไม่ทราบว่าแก้ยังไงดีคะ
|
|
Rank: มือพระกาฬ Groups: Member
Joined: 9/9/2008 Posts: 62
|
Conn2 ต้องกำหนดค่าให้มันก่อนครับ ลอกมาจากตัว Conn ก็ได้
มันต้องกำหนดไว้ที่ไหนสักแห่งในโปรแกรม ที่ประมาณว่า Conn=new SqlConnection(????????); น่ะครับ (??????? คือ Connection String)
ก็ให้ Conn2=new SqlConnection(????????); แบบว่าลอกมาเลยครับ
โค้ดของคุณผมแก้ให้ได้ประมาณอย่างนี้
private void LogLogIn()
{
com = new SqlCommand();
DateTime SaveTime = DateTime.Now;
QueryString = new StringBuilder();
QueryString.Append("INSERT INTO LogFile (empID, activity, nTime) ");
QueryString.Append(" VALUES ( @empID, 'Login', @nTime) ");
string sqlAdd;
sqlAdd = QueryString.ToString();
com.CommandText = sqlAdd;
com.CommandType = CommandType.Text;
com.Connection = Conn2;
com.Parameters.Clear();
com.Parameters.Add("@empID", SqlDbType.Int).Value = this.empUserName.Text.Trim();
com.Parameters.Add("@nTime", SqlDbType.DateTime).Value = SaveTime;
Conn2 = new SqlConnection(@"Data Source=ชื่อเซอร์ฟเวอร์;Initial Catalog=ชื่อดาต้าเบส;Integrated Security=True"); //<--ของคุณเป็นไงผมไม่รู้นะครับ
try
{
Conn2.Open();
com.ExecuteNonQuery();
}
catch (SqlException sEx)
{
MessageBox.Show("Error:\n" + sEx.Message);
}
finally
{
Conn2.Close();
}
}
|
|
Rank: มือพระกาฬ Groups: Member
Joined: 9/9/2008 Posts: 62
|
โทษที Conn2=new SqlConnection... ต้องอยู่ก่อน com.Connection = Conn2;
แก้ใหม่
private void LogLogIn()
{
com = new SqlCommand();
Conn2 = new SqlConnection(@"Data Source=ชื่อซอร์ฟเวอร์;Initial Catalog=ชื่อดาต้าเบส;Integrated Security=True"); //<--ของคุณเป็นไงผมไม่รู้นะครับ
DateTime SaveTime = DateTime.Now;
QueryString = new StringBuilder();
QueryString.Append("INSERT INTO LogFile (empID, activity, nTime) ");
QueryString.Append(" VALUES ( @empID, 'Login', @nTime) ");
string sqlAdd;
sqlAdd = QueryString.ToString();
com.CommandText = sqlAdd;
com.CommandType = CommandType.Text;
com.Connection = Conn2;
com.Parameters.Clear();
com.Parameters.Add("@empID", SqlDbType.Int).Value = this.empUserName.Text.Trim();
com.Parameters.Add("@nTime", SqlDbType.DateTime).Value = SaveTime;
try
{
Conn2.Open();
com.ExecuteNonQuery();
}
catch (SqlException sEx)
{
MessageBox.Show("Error:\n" + sEx.Message);
}
finally
{
Conn2.Close();
}
}
|
|
Rank: มือสมัครเล่น Groups: Member
Joined: 1/30/2008 Posts: 16
|
อ๋อ ได้ล่ะคะ ขอบคุณมากๆ
แต่ไม่มีวิธีที่จะไม่แสดง connection ใหม่เลยหรอ แบบว่าตอนsetup ใกล้มันจะยุ่งยาก
เพราะต้องเปลี่ยน connection ด้วยนะคะ
|
|
 Rank: มือเทพ Groups: Member
Joined: 12/6/2007 Posts: 354 Location: bkk
|
เขียนเป็น connectionstring ใน web.config ครับ [With great power comes great responsibility]
|
|
Rank: มือพระกาฬ Groups: Member
Joined: 9/9/2008 Posts: 62
|
ใช้ Connection ตัวเดียวไม่ได้ครับ เพราะคุณใช้ SqlDataReader (ตัวแปร dr) มันจะ Connect กับข้อมูลตลอดเวลาจนกว่าจะ Close() มัน
แต่เราสามารถใช้ DataSet เก็บข้อมูลไว้ก่อนได้ ผมจะลองแก้โค้ดดู
อันนี้คือวิธีที่ทำให้ใช้ Conn ตัวเดียว
private void bOk_Click(object sender, EventArgs e)
{
QueryString = new StringBuilder();
QueryString.Append("SELECT empUserName, empPassword, typeLevel FROM Employee");
QueryString.Append(" WHERE empUserName=@empUserName");
QueryString.Append(" AND empPassword=@empPassword");
string sqlLogin;
sqlLogin = QueryString.ToString();
com = new SqlCommand();
com.CommandText = sqlLogin;
com.CommandType = CommandType.Text;
com.Connection = Conn;
com.Parameters.Add("@empUserName", SqlDbType.VarChar).Value = this.empUserName.Text.Trim();
com.Parameters.Add("@empPassword", SqlDbType.Int).Value = this.empPassword.Text.Trim();
SqlDataAdapter da = new SqlDataAdapter(com);
DataSet ds = new DataSet();
da.Fill(ds, "Employee");
if (ds.Tables["Employee"].Rows.Count > 0)
{
LogLogIn();
if (Convert.ToString(ds.Tables["Employee"].Rows[0]["typelevel"]) == "1")
{
MessageBox.Show("กำลังเข้าสู่ระบบ คุณคือเลขานุการ");
fMain f = new fMain();
f.Show();
this.Hide();
}
else
{
MessageBox.Show("กำลังเข้าสู่ระบบ คุณคือพนักงาน");
fMain2 f = new fMain2();
f.Show();
this.Hide();
}
}
else
{
MessageBox.Show("ชื่อผู้ใช้ระบบ กับ รหัสผ่านผู้ใช้ระบบ ไม่ตรงกัน", "ผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Error);
empUserName.Text = "";
empUserName.Focus();
empPassword.Text = "";
}
}
private void LogLogIn()
{
com = new SqlCommand();
DateTime SaveTime = DateTime.Now;
QueryString = new StringBuilder();
QueryString.Append("INSERT INTO LogFile (empID, activity, nTime) ");
QueryString.Append(" VALUES ( @empID, 'Login', @nTime) ");
string sqlAdd;
sqlAdd = QueryString.ToString();
com.CommandText = sqlAdd;
com.CommandType = CommandType.Text;
com.Connection = Conn;
com.Parameters.Clear();
com.Parameters.Add("@empID", SqlDbType.Int).Value = this.empUserName.Text.Trim();
com.Parameters.Add("@nTime", SqlDbType.DateTime).Value = SaveTime;
try
{
com.ExecuteNonQuery();
}
catch (SqlException sEx)
{
MessageBox.Show("Error:\n" + sEx.Message);
}
}
|
|
|
Guest |