منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[كود] كود الإتصال بماكينات الحضور والإنصراف كامل - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم برمجة وتطوير المواقع (http://vb4arb.com/vb/forumdisplay.php?fid=51)
+--- قسم : قسم ASP.NET (http://vb4arb.com/vb/forumdisplay.php?fid=52)
+---- قسم : قسم مقالات ASP.NET (http://vb4arb.com/vb/forumdisplay.php?fid=54)
+---- الموضوع : [كود] كود الإتصال بماكينات الحضور والإنصراف كامل (/showthread.php?tid=75)



كود الإتصال بماكينات الحضور والإنصراف كامل - alhlwany - 14-09-13

كود :
بسم الله الرحمن الرحيم
السلام عليكم ورحمه الله وبركاته
أسأل الله تعالى أن يتقبل هذا العمل ويأجرنى عليه ويكون ذكاه علم لى
أخوكم فى الله محمد عبدالمرضى الحلوانى مصر وللتواصل معى إذا حدثت مشكله 24001742000
Moh.abdelmordy.it@gmail.com
الإتصال بأى ماكينه حضور وإنصراف سواء بالكارت أو بالبصمه فالتعامل ثابت لا يتغير ملحوظه قاعده البيانات سيكول سيرفر SQL Server
البدايه
سيتم فى البدايه اعداد وانشاء الجداول والاستورد بروسيدجر
أولا:- بناء الجداول اللازمه للإتصال وهما عباره عن جدولين
الأول :- جدول يضاف فيه كل حركات الماكينه بكل الحقول وسيكون اسمه HR_InOut_Tbl
الثانى :- جدول يضاف فيه حركات الماكينه الجديده ففى الخطوات القادمه سنلاحظ إنه عند كل اتصال وتحميل للبيانات سيتم كل الحركات من على
الماكينه وسيتم ذلك على الجدول الأول أما الجدول الثانى فهو لإضاف السطور الجديده او الاحداث الجديده على الماكينه والبيانات القديمه محفوظه ايضا فيه
وسنرى كيف يتم ذلك
كود انشاء الجدول الأول HR_InOut_Tbl
CREATE TABLE [dbo].[HR_InOut_Tbl](
[IDD] [int] IDENTITY(1,1) NOT NULL,
[dwEnrollNumber] [int] NULL,
[name] [nvarchar](50) NULL,
[password] [nvarchar](50) NULL,
[privileg] [int] NULL,
[dwVerifyMode] [int] NULL,
[dwInOutMode] [int] NULL,
[timeStr] [nvarchar](50) NULL,
[_machineNumber] [int] NULL,
[_enrollNumber] [int] NULL,
[_enrollMachineNumber] [int] NULL,
[_verifyMode] [int] NULL,
[_inOutMode] [int] NULL,
[_year] [int] NULL,
[_month] [int] NULL,
[_day] [int] NULL,
[_hour] [int] NULL,
[_minute] [int] NULL,
CONSTRAINT [PK_HR_InOut_Tbl] PRIMARY KEY CLUSTERED
(
[IDD] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
كود انشاء الجدول الثانى HR_InOutAct_Tbl
CREATE TABLE [dbo].[HR_InOut_Tbl](
[IDD] [int] IDENTITY(1,1) NOT NULL,
[dwEnrollNumber] [int] NULL,
[name] [nvarchar](50) NULL,
[password] [nvarchar](50) NULL,
[privileg] [int] NULL,
[dwVerifyMode] [int] NULL,
[dwInOutMode] [int] NULL,
[timeStr] [nvarchar](50) NULL,
[_machineNumber] [int] NULL,
[_enrollNumber] [int] NULL,
[_enrollMachineNumber] [int] NULL,
[_verifyMode] [int] NULL,
[_inOutMode] [int] NULL,
[_year] [int] NULL,
[_month] [int] NULL,
[_day] [int] NULL,
[_hour] [int] NULL,
[_minute] [int] NULL,
CONSTRAINT [PK_HR_InOut_Tbl] PRIMARY KEY CLUSTERED
(
[IDD] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ثانيا :- بناء كويرى لجلب البيانات التى لم تضاف فى الجدول الثانى HR_InOutAct_Tbl
وكود انشائها
SELECT dbo.HR_InOut_Tbl.dwEnrollNumber, dbo.HR_InOut_Tbl.name, dbo.HR_InOut_Tbl.password, dbo.HR_InOut_Tbl.privileg, dbo.HR_InOut_Tbl.dwVerifyMode,
dbo.HR_InOut_Tbl.dwInOutMode, dbo.HR_InOut_Tbl.timeStr, dbo.HR_InOut_Tbl._machineNumber, dbo.HR_InOut_Tbl._enrollNumber,
dbo.HR_InOut_Tbl._enrollMachineNumber, dbo.HR_InOut_Tbl._verifyMode, dbo.HR_InOut_Tbl._inOutMode, dbo.HR_InOut_Tbl._year,
dbo.HR_InOut_Tbl._month, dbo.HR_InOut_Tbl._day, dbo.HR_InOut_Tbl._hour, dbo.HR_InOut_Tbl._minute
FROM dbo.HR_InOut_Tbl LEFT OUTER JOIN
dbo.HR_InOutAct_Tbl ON dbo.HR_InOut_Tbl.dwEnrollNumber = dbo.HR_InOutAct_Tbl.dwEnrollNumber AND
dbo.HR_InOut_Tbl.name = dbo.HR_InOutAct_Tbl.name AND dbo.HR_InOut_Tbl.password = dbo.HR_InOutAct_Tbl.password AND
dbo.HR_InOut_Tbl.privileg = dbo.HR_InOutAct_Tbl.privileg AND dbo.HR_InOut_Tbl.dwVerifyMode = dbo.HR_InOutAct_Tbl.dwVerifyMode AND
dbo.HR_InOut_Tbl.dwInOutMode = dbo.HR_InOutAct_Tbl.dwInOutMode AND dbo.HR_InOut_Tbl.timeStr = dbo.HR_InOutAct_Tbl.timeStr AND
dbo.HR_InOut_Tbl._machineNumber = dbo.HR_InOutAct_Tbl._machineNumber AND dbo.HR_InOut_Tbl._inOutMode = dbo.HR_InOutAct_Tbl._inOutMode AND
dbo.HR_InOut_Tbl._verifyMode = dbo.HR_InOutAct_Tbl._verifyMode AND
dbo.HR_InOut_Tbl._enrollMachineNumber = dbo.HR_InOutAct_Tbl._enrollMachineNumber AND
dbo.HR_InOut_Tbl._enrollNumber = dbo.HR_InOutAct_Tbl._enrollNumber AND dbo.HR_InOut_Tbl._year = dbo.HR_InOutAct_Tbl._year AND
dbo.HR_InOut_Tbl._month = dbo.HR_InOutAct_Tbl._month AND dbo.HR_InOut_Tbl._day = dbo.HR_InOutAct_Tbl._day AND
dbo.HR_InOut_Tbl._hour = dbo.HR_InOutAct_Tbl._hour AND dbo.HR_InOut_Tbl._minute = dbo.HR_InOutAct_Tbl._minute
WHERE (dbo.HR_InOutAct_Tbl._minute IS NULL)
GROUP BY dbo.HR_InOut_Tbl.dwEnrollNumber, dbo.HR_InOut_Tbl.name, dbo.HR_InOut_Tbl.password, dbo.HR_InOut_Tbl.privileg, dbo.HR_InOut_Tbl.dwVerifyMode,
dbo.HR_InOut_Tbl.dwInOutMode, dbo.HR_InOut_Tbl.timeStr, dbo.HR_InOut_Tbl._machineNumber, dbo.HR_InOut_Tbl._enrollNumber,
dbo.HR_InOut_Tbl._enrollMachineNumber, dbo.HR_InOut_Tbl._verifyMode, dbo.HR_InOut_Tbl._inOutMode, dbo.HR_InOut_Tbl._year,
dbo.HR_InOut_Tbl._month, dbo.HR_InOut_Tbl._day, dbo.HR_InOut_Tbl._hour, dbo.HR_InOut_Tbl._minute
ثم قم بحفظ الفيو بإسم Vew_AllMacData
ثالثا : بناء الاستورد بروسيدجر اللازمه
-4 ستورد بروسيدجر لاضافه الحركات من الماكينه فى الجدول الاول HR_InOut_Tbl
-0 ستورد بروسيدجر لاضافه البيانات الجديده التى لم تضاف فى الجدول الثانى HR_InOutAct_Tbl
كود انشاء الاستورد بروسيدجر الاولى AddGdata
CREATE PROCEDURE dbo.AddGdata ( @dwEnrollNumber Int, @name nvarchar(50), @password nvarchar(50), @privileg Int, @dwVerifyMode Int, @dwInOutMode Int, @timeStr nvarchar(50), @_machineNumber int, @_enrollNumber int, @_enrollMachineNumber int, @_verifyMode int, @_inOutMode int, @_year int, @_month int, @_day int, @_hour int, @_minute int ) AS delete from HR_InOut_Tbl insert into HR_InOut_Tbl (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) values (@dwEnrollNumber,@name,@password,@privileg,@dwVerifyMode,@dwInOutMode,@timeStr,@_machineNumber,@_enrollNumber,@_enrollMachineNumber,@_verifyMode,@_inOutMode,@_year,@_month,@_day,@_hour,@_minute) RETURN
كود انشاء الاستورد بروسيدجر الثانيه AddActdata
CREATE PROCEDURE dbo.AddActdata AS
insert into HR_InOutAct_Tbl (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) select dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute from Vew_AllMacData RETURN
الأكواد سليمه ان شاء الله ولكن تتبعو الخطوات بكل دقه
تم الانتهاء من اعداد الجداول وتهيئه الاستورد بروسيدجر سننتقل الى فيجوال بيسك ونفتح مشروع ويب جديد بلغه سى
شارب C#
تم ارفاق ملف SDK فى المرفقات فك ضغط الملف وقم بعمل كوبى لكل الملفات الموجوده فيه وقم بنسخها فى System32
او بنسخها فى Syswow64 اذا كانت الويندوز 7 او 8 او فيستا
ثم قم بكتابه التالى فى قائمه Run
Cmd
ويفضل فتح نافذه ال Command ب
Run As Administrator
ونكتب التالى فيها
Regsvr32 C:\Windows\SysWOW64\ zkemkeeper.dll
ثم اضغط انتر
ستظهر نافذه تدلك على نجاح العمليه فاذا ظهر رساله خطأ فابحث عن الخطأ فى جوجل الحلول موجوده فلن نتطرق لحل
مشاكل ال regsvr هنا حيث انه موضوع طويل بعد نجاح العمليه
-4 سنتوجه الان الى مشروع الويب ونقوم بعمل اد ريفرنس لملف ال zkemkeeper.dll من مساره على سيستم 20 او
سيس واو 41 ونضغط اوك
-0 اضافه جمله الاتصال التاليه فى ملف الويب كونفيج بين تاجات connectionStrings <connectionStrings> <add name="ERP_ProjectConnectionString" connectionString="Data Source=.;Initial Catalog=ERP_Project;uid=sa; password=mordy;" providerName="System.Data.SqlClient"/> </connectionStrings>
-2 اضافه كلاس للاتصال مع قاعده بيانات السيكول وسيكون اسمه ConnectMang 4- using System; 5- using System.Data; 6- using System.Configuration; 7- using System.Linq; 8- using System.Web; 9- using System.Web.Security; 10- using System.Web.UI; 11- using System.Web.UI.HtmlControls; 12- using System.Web.UI.WebControls; 13- using System.Web.UI.WebControls.WebParts; 14- using System.Xml.Linq; 15- using System.Data.SqlClient; 16- 17- 18- /// <summary> 19- /// Summary description for ConnectMang 20- /// </summary> 21- public class ConnectMang 22- { 23- 24- public static SqlConnection GetConnection() 25- { 26- 27- SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ERP_ProjectConnectionString"].ToString()); 28- Conn.Open(); 29- return Conn; 30- } 31- }
-1 عمل كلاس لعمل الميسود التى ستستدعى من خلالها الاستورد بروسيدجر التى تم عملها فى السيكول سيرفر
من قبل واسم الكلاس AddInMac
وكود الميسودز
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web;
using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq;
using System.Data.SqlClient; using System.Data; using System.Collections.Generic;
/// <summary> /// Summary description for AddInMac /// </summary> public class AddInMac { public AddInMac() { // // TODO: Add constructor logic here // }
public void AddGdata(Int32 dwEnrollNumber, string name, string password, Int32 privileg, Int32 dwVerifyMode, Int32 dwInOutMode, string timeStr, int _machineNumber, int _enrollNumber, int _enrollMachineNumber, int _verifyMode, int _inOutMode, int _year, int _month, int _day, int _hour, int _minute) {
using (SqlConnection con = ConnectMang.GetConnection()) { SqlCommand Cmd = new SqlCommand("AddGdata", con); Cmd.CommandType = CommandType.StoredProcedure; Cmd.Parameters.AddWithValue("@dwEnrollNumber", dwEnrollNumber); Cmd.Parameters.AddWithValue("@name", name); Cmd.Parameters.AddWithValue("@password", password); Cmd.Parameters.AddWithValue("@privileg", privileg); Cmd.Parameters.AddWithValue("@dwVerifyMode", dwVerifyMode); Cmd.Parameters.AddWithValue("@dwInOutMode", dwInOutMode); Cmd.Parameters.AddWithValue("@timeStr", timeStr); Cmd.Parameters.AddWithValue("@_machineNumber", _machineNumber); Cmd.Parameters.AddWithValue("@_enrollNumber", _enrollNumber); Cmd.Parameters.AddWithValue("@_enrollMachineNumber", _enrollMachineNumber); Cmd.Parameters.AddWithValue("@_verifyMode", _verifyMode); Cmd.Parameters.AddWithValue("@_inOutMode", _inOutMode); Cmd.Parameters.AddWithValue("@_year", _year); Cmd.Parameters.AddWithValue("@_month", _month); Cmd.Parameters.AddWithValue("@_day", _day); Cmd.Parameters.AddWithValue("@_hour", _hour); Cmd.Parameters.AddWithValue("@_minute", _minute); Cmd.ExecuteNonQuery(); } } public void AddActdata() { using (SqlConnection con = ConnectMang.GetConnection()) { SqlCommand Cmd = new SqlCommand("AddActdata", con); Cmd.CommandType = CommandType.StoredProcedure; Cmd.ExecuteNonQuery(); } } }
-5 ثم اضافه عدد 2 تكست بوكس وعدد 0 بوتون فى صفحه الويب وجريد فيو وقم بتغير اسمائها كما فى الكود
الدخول على كود بهيند الصفحه بدبل كليك على الصفحه ونستدعى فضاءات الاسماء التاليه مع استدعاء اسم الملف
الدى ال ال الذى قمنا بعمل اد ريفرنس له كالتالى
using System; using System.Collections.Generic; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration;
using zkemkeeper; ملف الدى ال ال
-4 ثم عمل اوبجكت من ملف الدى ال وتعريف الفاريبول واوبجكت من ملف الكلاس الخاص بالميسود الذى قمنا بعمله من قبل راجع الخطوات ويتم
وضع سطور الكود تحت Page: System.Web.UI. HR_PersonalAffire_DownDataMac class partial public
Boolean conn, ll; Int32 errCode, rr; DataTable Dt = new DataTable();
public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM(); اوبجكت من ملف الدى ال ال الريفرنس
private Boolean bIsConnected = false; private int iMachineNumber;
AddInMac addinmacdll = new AddInMac(); اوبجكت من الكلاس الذى قمنا بتعريفه
-7 كود الزر الاول Connection – Check
try {
axCZKEM1.SetCommPassword(Convert.ToInt16(Txt_CommKey.Text.Trim())); axCZKEM1.BASE64 = 1; conn = axCZKEM1.Connect_Net(Txt_MacIP.Text.Trim(), Convert.ToInt16(Txt_MacPort.Text.Trim())); axCZKEM1.GetLastError(errCode); rr = axCZKEM1.MachineNumber;
if (conn.Equals(true)) { LblMsGError.Text = "تم الإتصال بنجاح تستطيع تحميل الحركات ";
}
} catch (Exception ex) {
string Er = ex.ToString(); HttpCookie ErCokis = new HttpCookie("ErCokis"); ErCokis.Value = Er.ToString(); ErCokis.Expires = DateTime.Now.AddHours(1); Response.Cookies.Add(ErCokis); Response.Redirect("~/ErrorPage.aspx"); }
ملحوظه يجب ان نقوم بعمل ميسود لكود فتح الاتصال ونستدعيها تحت الزر الاول بدلا من كتابه هذا الكود تحت الزر
الاول لاننا سنحتاج فتح الاتصال فى عمليه تحميل الحركات وذلك بدلا من اعاده كتابه نفس سطور الكود مره اخرى
تحت الزر الثانى
كود الزر الثانى
ConnectMac(); ميسود فتح الاتصال الذى تكلمنا عنها وهى نفس الكود المكتوب تحت الزر الاول
int dwEnrollNumber = 0; string name = ""; string password = ""; int privileg = 0; SqlConnection conexaoMySQL = default(SqlConnection); string strSQL = ""; int dwVerifyMode = 0; int dwInOutMode = 0; string timeStr = ""; bool enable = false; System.Text.StringBuilder _data = new System.Text.StringBuilder(); int _errorCode = 0; int _machineNumber = 0; int _enrollNumber = 0; int _enrollMachineNumber = 0; int _verifyMode = 0; int _inOutMode = 0; int _year = 0; int _month = 0; int _day = 0; int _hour = 0; int _minute = 0;
axCZKEM1.BASE64 = 1; axCZKEM1.ReadMark = true; axCZKEM1.GetLastError(_errorCode); axCZKEM1.ReadAllUserID(1); axCZKEM1.ReadMark = true;
// Boolean DD = axCZKEM1.ReadGeneralLogData(rr); // Label1.Text = DD.ToString()+"MacNum____"+rr.ToString();
if (axCZKEM1.ReadGeneralLogData(1)) { axCZKEM1.GetLastError(ref _errorCode);
while (axCZKEM1.GetGeneralLogData(1, ref _machineNumber, ref _enrollNumber, ref _enrollMachineNumber, ref _verifyMode, ref _inOutMode, ref _year, ref _month, ref _day, ref _hour, ref _minute)) { axCZKEM1.GetGeneralLogDataStr(1, ref dwEnrollNumber, ref dwVerifyMode, ref dwInOutMode, ref timeStr);
axCZKEM1.GetUserInfo(1, dwEnrollNumber, ref name, ref password, ref privileg, ref enable); int data1 = 0; int data2 = 1000000; conexaoMySQL = new SqlConnection(ConfigurationManager.ConnectionStrings["ERP_ProjectConnectionString"].ToString()); if (data1 < _minute) { //strSQL = "INSERT INTO InOut (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) VALUES ( '" + dwEnrollNumber + "','" + name + "','" + password + "','" + privileg + "','" + dwVerifyMode + "','" + dwInOutMode + "','" + timeStr + "','" + _machineNumber + "','" + _enrollNumber + "','" + _enrollMachineNumber + "','" + _verifyMode + "','" + _inOutMode + "','" + _year + "','" + _month + "', '" + _day + "','" + _hour + "','" + _minute + "')"; //strSQL = "INSERT INTO InOut (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) VALUES ( '" + 1 + "','" + "MM" + "','" + "PS" + "','" + 1 + "','" + 1 + "','" + 1 + "','" + "timeStr" + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "', '" + 1 + "','" + 1 + "','" + 1 + "')";
addinmacdll.AddGdata(dwEnrollNumber, name, password, privileg, dwVerifyMode, dwInOutMode, timeStr, _machineNumber, _enrollNumber, _enrollMachineNumber, _verifyMode, _inOutMode, _year, _month, _day, _hour, _minute);
}
Label1.Text = _enrollNumber.ToString(); } addinmacdll.AddActdata(); LblMsGError.Text = "تم تحميل الحركات "; } // GridView1.DataBind();
وبهذا تم الانتهاء والحمد لله وانا معكم فى التواصل على الميل المكتوب اعلاه
والسلام عليكم ورحمه الله
[/align]


RE: كود الإتصال بماكينات الحضور والإنصراف كامل - Nŏ Coммεητ - 15-09-13




جزاك الله خير والله يعطيك العافيه

بس ياليت يكون الكود في المشاركه مفصول عن الموضوع

وماقصرت وان شاء الله اجربه لاني بحاجه الكود
___________

دمت بخير




RE: كود الإتصال بماكينات الحضور والإنصراف كامل - hoob computer - 09-04-14

بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته,
بعد إذن أخي (alhlawy), المشاركة غير واضحة بسبب عدم تنسيقها ...

أحببت أن أقوم بتنسيقها عن أخي صاحب الموضوع ... و للأمانة, لم أقم بتغيير أي شيء في محتواها.
تفضلوا:


السلام عليكم ورحمه الله وبركاته
أسأل الله تعالى أن يتقبل هذا العمل ويأجرنى عليه ويكون ذكاه علم لى
أخوكم فى الله محمد عبدالمرضى الحلوانى مصر وللتواصل معى إذا حدثت مشكله 24001742000
Moh.abdelmordy.it@gmail.com
الإتصال بأى ماكينه حضور وإنصراف سواء بالكارت أو بالبصمه فالتعامل ثابت لا يتغير ملحوظه قاعده البيانات سيكول سيرفر SQL Server
البدايه
سيتم فى البدايه اعداد وانشاء الجداول والاستورد بروسيدجر
أولا:- بناء الجداول اللازمه للإتصال وهما عباره عن جدولين:

الأول :- جدول يضاف فيه كل حركات الماكينه بكل الحقول وسيكون اسمه HR_InOut_Tbl
الثانى :- جدول يضاف فيه حركات الماكينه الجديده ففى الخطوات القادمه سنلاحظ إنه عند كل اتصال وتحميل للبيانات سيتم كل الحركات من على
الماكينه وسيتم ذلك على الجدول الأول أما الجدول الثانى فهو لإضاف السطور الجديده او الاحداث الجديده على الماكينه والبيانات القديمه محفوظه ايضا فيه
وسنرى كيف يتم ذلك

كود انشاء الجدول الأول HR_InOut_Tbl

PHP كود :
CREATE TABLE [dbo].[HR_InOut_Tbl](
[
IDD] [intIDENTITY(1,1NOT NULL,
[
dwEnrollNumber] [intNULL,
[
name] [nvarchar](50NULL,
[
password] [nvarchar](50NULL,
[
privileg] [intNULL,
[
dwVerifyMode] [intNULL,
[
dwInOutMode] [intNULL,
[
timeStr] [nvarchar](50NULL,
[
_machineNumber] [intNULL,
[
_enrollNumber] [intNULL,
[
_enrollMachineNumber] [intNULL,
[
_verifyMode] [intNULL,
[
_inOutMode] [intNULL,
[
_year] [intNULL,
[
_month] [intNULL,
[
_day] [intNULL,
[
_hour] [intNULL,
[
_minute] [intNULL,
CONSTRAINT [PK_HR_InOut_TblPRIMARY KEY CLUSTERED
(
[
IDDASC
)WITH (PAD_INDEX OFFSTATISTICS_NORECOMPUTE OFFIGNORE_DUP_KEY OFFALLOW_ROW_LOCKS ONALLOW_PAGE_LOCKS ONON [PRIMARY]
ON [PRIMARY]
GO 

كود انشاء الجدول الثانى HR_InOutAct_Tbl

PHP كود :
CREATE TABLE [dbo].[HR_InOut_Tbl](
[
IDD] [intIDENTITY(1,1NOT NULL,
[
dwEnrollNumber] [intNULL,
[
name] [nvarchar](50NULL,
[
password] [nvarchar](50NULL,
[
privileg] [intNULL,
[
dwVerifyMode] [intNULL,
[
dwInOutMode] [intNULL,
[
timeStr] [nvarchar](50NULL,
[
_machineNumber] [intNULL,
[
_enrollNumber] [intNULL,
[
_enrollMachineNumber] [intNULL,
[
_verifyMode] [intNULL,
[
_inOutMode] [intNULL,
[
_year] [intNULL,
[
_month] [intNULL,
[
_day] [intNULL,
[
_hour] [intNULL,
[
_minute] [intNULL,
CONSTRAINT [PK_HR_InOut_TblPRIMARY KEY CLUSTERED
(
[
IDDASC
)WITH (PAD_INDEX OFFSTATISTICS_NORECOMPUTE OFFIGNORE_DUP_KEY OFFALLOW_ROW_LOCKS ONALLOW_PAGE_LOCKS ONON [PRIMARY]
ON [PRIMARY]
GO 

ثانيا :- بناء كويرى لجلب البيانات التى لم تضاف فى الجدول الثانى HR_InOutAct_Tbl

وكود انشائها

PHP كود :
SELECT dbo.HR_InOut_Tbl.dwEnrollNumberdbo.HR_InOut_Tbl.namedbo.HR_InOut_Tbl.passworddbo.HR_InOut_Tbl.privilegdbo.HR_InOut_Tbl.dwVerifyMode,
dbo.HR_InOut_Tbl.dwInOutModedbo.HR_InOut_Tbl.timeStrdbo.HR_InOut_Tbl._machineNumberdbo.HR_InOut_Tbl._enrollNumber,
dbo.HR_InOut_Tbl._enrollMachineNumberdbo.HR_InOut_Tbl._verifyModedbo.HR_InOut_Tbl._inOutModedbo.HR_InOut_Tbl._year,
dbo.HR_InOut_Tbl._monthdbo.HR_InOut_Tbl._daydbo.HR_InOut_Tbl._hourdbo.HR_InOut_Tbl._minute
FROM dbo
.HR_InOut_Tbl LEFT OUTER JOIN
dbo
.HR_InOutAct_Tbl ON dbo.HR_InOut_Tbl.dwEnrollNumber dbo.HR_InOutAct_Tbl.dwEnrollNumber AND
dbo.HR_InOut_Tbl.name dbo.HR_InOutAct_Tbl.name AND dbo.HR_InOut_Tbl.password dbo.HR_InOutAct_Tbl.password AND
dbo.HR_InOut_Tbl.privileg dbo.HR_InOutAct_Tbl.privileg AND dbo.HR_InOut_Tbl.dwVerifyMode dbo.HR_InOutAct_Tbl.dwVerifyMode AND
dbo.HR_InOut_Tbl.dwInOutMode dbo.HR_InOutAct_Tbl.dwInOutMode AND dbo.HR_InOut_Tbl.timeStr dbo.HR_InOutAct_Tbl.timeStr AND
dbo.HR_InOut_Tbl._machineNumber dbo.HR_InOutAct_Tbl._machineNumber AND dbo.HR_InOut_Tbl._inOutMode dbo.HR_InOutAct_Tbl._inOutMode AND
dbo.HR_InOut_Tbl._verifyMode dbo.HR_InOutAct_Tbl._verifyMode AND
dbo.HR_InOut_Tbl._enrollMachineNumber dbo.HR_InOutAct_Tbl._enrollMachineNumber AND
dbo.HR_InOut_Tbl._enrollNumber dbo.HR_InOutAct_Tbl._enrollNumber AND dbo.HR_InOut_Tbl._year dbo.HR_InOutAct_Tbl._year AND
dbo.HR_InOut_Tbl._month dbo.HR_InOutAct_Tbl._month AND dbo.HR_InOut_Tbl._day dbo.HR_InOutAct_Tbl._day AND
dbo.HR_InOut_Tbl._hour dbo.HR_InOutAct_Tbl._hour AND dbo.HR_InOut_Tbl._minute dbo.HR_InOutAct_Tbl._minute
WHERE 
(dbo.HR_InOutAct_Tbl._minute IS NULL)
GROUP BY dbo.HR_InOut_Tbl.dwEnrollNumberdbo.HR_InOut_Tbl.namedbo.HR_InOut_Tbl.passworddbo.HR_InOut_Tbl.privilegdbo.HR_InOut_Tbl.dwVerifyMode,
dbo.HR_InOut_Tbl.dwInOutModedbo.HR_InOut_Tbl.timeStrdbo.HR_InOut_Tbl._machineNumberdbo.HR_InOut_Tbl._enrollNumber,
dbo.HR_InOut_Tbl._enrollMachineNumberdbo.HR_InOut_Tbl._verifyModedbo.HR_InOut_Tbl._inOutModedbo.HR_InOut_Tbl._year,
dbo.HR_InOut_Tbl._monthdbo.HR_InOut_Tbl._daydbo.HR_InOut_Tbl._hourdbo.HR_InOut_Tbl._minute 

ثم قم بحفظ الفيو بإسم Vew_AllMacData

ثالثا : بناء الاستورد بروسيدجر اللازمه
-4 ستورد بروسيدجر لاضافه الحركات من الماكينه فى الجدول الاول HR_InOut_Tbl
-0 ستورد بروسيدجر لاضافه البيانات الجديده التى لم تضاف فى الجدول الثانى HR_InOutAct_Tbl

كود انشاء الاستورد بروسيدجر الاولى AddGdata

PHP كود :
CREATE PROCEDURE dbo.AddGdata ( @dwEnrollNumber Int, @name nvarchar(50), @password nvarchar(50), @privileg Int, @dwVerifyMode Int, @dwInOutMode Int, @timeStr nvarchar(50), @_machineNumber int, @_enrollNumber int, @_enrollMachineNumber int, @_verifyMode int, @_inOutMode int, @_year int, @_month int, @_day int, @_hour int, @_minute int ) AS delete from HR_InOut_Tbl insert into HR_InOut_Tbl (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber​,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minutevalues (@dwEnrollNumber,@name,@password,@privileg,@dwVerifyMode,@dwInOutMode,@timeStr,@​_machineNumber,@_enrollNumber,@_enrollMachineNumber,@_verifyMode,@_inOutMode,@_y​ear,@_month,@_day,@_hour,@_minute) RETURN 

كود انشاء الاستورد بروسيدجر الثانيه AddActdata

PHP كود :
CREATE PROCEDURE dbo.AddActdata AS
insert into HR_InOutAct_Tbl (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber​,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minuteselect dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber​,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute from Vew_AllMacData RETURN 

الأكواد سليمه ان شاء الله ولكن تتبعو الخطوات بكل دقه
تم الانتهاء من اعداد الجداول وتهيئه الاستورد بروسيدجر سننتقل الى فيجوال بيسك ونفتح مشروع ويب جديد بلغه سى
شارب C#
تم ارفاق ملف SDK فى المرفقات فك ضغط الملف وقم بعمل كوبى لكل الملفات الموجوده فيه وقم بنسخها فى System32
او بنسخها فى Syswow64 اذا كانت الويندوز 7 او 8 او فيستا
ثم قم بكتابه التالى فى قائمه Run
Cmd
ويفضل فتح نافذه ال Command ب
Run As Administrator
ونكتب التالى فيها
Regsvr32 C:\Windows\SysWOW64\ zkemkeeper.dll
ثم اضغط انتر
ستظهر نافذه تدلك على نجاح العمليه فاذا ظهر رساله خطأ فابحث عن الخطأ فى جوجل الحلول موجوده فلن نتطرق لحل
مشاكل ال regsvr هنا حيث انه موضوع طويل بعد نجاح العمليه
-4 سنتوجه الان الى مشروع الويب ونقوم بعمل اد ريفرنس لملف ال zkemkeeper.dll من مساره على سيستم 20 او
سيس واو 41 ونضغط اوك

-0 اضافه جمله الاتصال التاليه فى ملف الويب كونفيج بين تاجات
PHP كود :
connectionStrings <connectionStrings> <add name="ERP_ProjectConnectionString" connectionString="Data Source=.;Initial Catalog=ERP_Project;uid=sa; password=mordy;" providerName="System.Data.SqlClient"/> </connectionStrings

-2 اضافه كلاس للاتصال مع قاعده بيانات السيكول وسيكون اسمه
PHP كود :
ConnectMang 4using System5using System.Data6using System.Configuration7using System.Linq8using System.Web9using System.Web.Security10using System.Web.UI11using System.Web.UI.HtmlControls12using System.Web.UI.WebControls13using System.Web.UI.WebControls.WebParts14using System.Xml.Linq15using System.Data.SqlClient161718/// <summary> 19- /// Summary description for ConnectMang 20- /// </summary> 21- public class ConnectMang 22- { 23- 24- public static SqlConnection GetConnection() 25- { 26- 27- SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ERP_ProjectConnectionString"].ToString()); 28- Conn.Open(); 29- return Conn; 30- } 31- } 

-1 عمل كلاس لعمل الميسود التى ستستدعى من خلالها الاستورد بروسيدجر التى تم عملها فى السيكول سيرفر
من قبل واسم الكلاس AddInMac
وكود الميسودز

PHP كود :
using Systemusing System.Datausing System.Configurationusing System.Linqusing System.Web;
using System.Web.Securityusing System.Web.UIusing System.Web.UI.HtmlControlsusing System.Web.UI.WebControlsusing System.Web.UI.WebControls.WebPartsusing System.Xml.Linq;
using System.Data.SqlClientusing System.Datausing System.Collections.Generic;
/// <summary> /// Summary description for AddInMac /// </summary> public class AddInMac { public AddInMac() { // // TODO: Add constructor logic here // }
public void AddGdata(Int32 dwEnrollNumberstring namestring passwordInt32 privilegInt32 dwVerifyModeInt32 dwInOutModestring timeStrint _machineNumberint _enrollNumberint _enrollMachineNumberint _verifyModeint _inOutModeint _yearint _monthint _dayint _hourint _minute) {
using (SqlConnection con ConnectMang.GetConnection()) { SqlCommand Cmd = new SqlCommand("AddGdata"con); Cmd.CommandType CommandType.StoredProcedureCmd.Parameters.AddWithValue("@dwEnrollNumber"dwEnrollNumber); Cmd.Parameters.AddWithValue("@name"name); Cmd.Parameters.AddWithValue("@password"password); Cmd.Parameters.AddWithValue("@privileg"privileg); Cmd.Parameters.AddWithValue("@dwVerifyMode"dwVerifyMode); Cmd.Parameters.AddWithValue("@dwInOutMode"dwInOutMode); Cmd.Parameters.AddWithValue("@timeStr"timeStr); Cmd.Parameters.AddWithValue("@_machineNumber"_machineNumber); Cmd.Parameters.AddWithValue("@_enrollNumber"_enrollNumber); Cmd.Parameters.AddWithValue("@_enrollMachineNumber"_enrollMachineNumber); Cmd.Parameters.AddWithValue("@_verifyMode"_verifyMode); Cmd.Parameters.AddWithValue("@_inOutMode"_inOutMode); Cmd.Parameters.AddWithValue("@_year"_year); Cmd.Parameters.AddWithValue("@_month"_month); Cmd.Parameters.AddWithValue("@_day"_day); Cmd.Parameters.AddWithValue("@_hour"_hour); Cmd.Parameters.AddWithValue("@_minute"_minute); Cmd.ExecuteNonQuery(); } } public void AddActdata() { using (SqlConnection con ConnectMang.GetConnection()) { SqlCommand Cmd = new SqlCommand("AddActdata"con); Cmd.CommandType CommandType.StoredProcedureCmd.ExecuteNonQuery(); } } } 

-5 ثم اضافه عدد 2 تكست بوكس وعدد 0 بوتون فى صفحه الويب وجريد فيو وقم بتغير اسمائها كما فى الكود
الدخول على كود بهيند الصفحه بدبل كليك على الصفحه ونستدعى فضاءات الاسماء التاليه مع استدعاء اسم الملف
الدى ال ال الذى قمنا بعمل اد ريفرنس له كالتالى

PHP كود :
using Systemusing System.Collections.Genericusing System.Collections.Genericusing System.Datausing System.Data.SqlClientusing System.IOusing System.Linqusing System.Webusing System.Web.UIusing System.Web.UI.WebControlsusing System.Configuration;
using zkemkeeper

ملف الدى ال ال
-4 ثم عمل اوبجكت من ملف الدى ال وتعريف الفاريبول واوبجكت من ملف الكلاس الخاص بالميسود الذى قمنا بعمله من قبل راجع الخطوات ويتم
وضع سطور الكود تحت

PHP كود :
PageSystem.Web.UIHR_PersonalAffire_DownDataMac class partial public
Boolean connllInt32 errCoderrDataTable Dt = new DataTable();
public 
zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM(); 

اوبجكت من ملف الدى ال ال الريفرنس

PHP كود :
private Boolean bIsConnected false; private int iMachineNumber;
AddInMac addinmacdll = new AddInMac(); 

اوبجكت من الكلاس الذى قمنا بتعريفه
-7 كود الزر الاول Connection – Check

PHP كود :
try {
axCZKEM1.SetCommPassword(Convert.ToInt16(Txt_CommKey.Text.Trim())); axCZKEM1.BASE64 1conn axCZKEM1.Connect_Net(Txt_MacIP.Text.Trim(), Convert.ToInt16(Txt_MacPort.Text.Trim())); axCZKEM1.GetLastError(errCode); rr axCZKEM1.MachineNumber;
if (
conn.Equals(true)) { LblMsGError.Text "تم الإتصال بنجاح تستطيع تحميل الحركات ";
}
} catch (
Exception ex) {
string Er ex.ToString(); HttpCookie ErCokis = new HttpCookie("ErCokis"); ErCokis.Value Er.ToString(); ErCokis.Expires DateTime.Now.AddHours(1); Response.Cookies.Add(ErCokis); Response.Redirect("~/ErrorPage.aspx"); } 

ملحوظه يجب ان نقوم بعمل ميسود لكود فتح الاتصال ونستدعيها تحت الزر الاول بدلا من كتابه هذا الكود تحت الزر
الاول لاننا سنحتاج فتح الاتصال فى عمليه تحميل الحركات وذلك بدلا من اعاده كتابه نفس سطور الكود مره اخرى
تحت الزر الثانى
كود الزر الثانى


PHP كود :
ConnectMac(); 

ميسود فتح الاتصال الذى تكلمنا عنها وهى نفس الكود المكتوب تحت الزر الاول

PHP كود :
int dwEnrollNumber 0string name ""string password ""int privileg 0SqlConnection conexaoMySQL = default(SqlConnection); string strSQL ""int dwVerifyMode 0int dwInOutMode 0string timeStr ""bool enable falseSystem.Text.StringBuilder _data = new System.Text.StringBuilder(); int _errorCode 0int _machineNumber 0int _enrollNumber 0int _enrollMachineNumber 0int _verifyMode 0int _inOutMode 0int _year 0int _month 0int _day 0int _hour 0int _minute 0;
axCZKEM1.BASE64 1axCZKEM1.ReadMark trueaxCZKEM1.GetLastError(_errorCode); axCZKEM1.ReadAllUserID(1); axCZKEM1.ReadMark true;
// Boolean DD = axCZKEM1.ReadGeneralLogData(rr); // Label1.Text = DD.ToString()+"MacNum____"+rr.ToString();
if (axCZKEM1.ReadGeneralLogData(1)) { axCZKEM1.GetLastError(ref _errorCode);
while (
axCZKEM1.GetGeneralLogData(1ref _machineNumberref _enrollNumberref _enrollMachineNumberref _verifyModeref _inOutModeref _yearref _monthref _dayref _hourref _minute)) { axCZKEM1.GetGeneralLogDataStr(1ref dwEnrollNumberref dwVerifyModeref dwInOutModeref timeStr);
axCZKEM1.GetUserInfo(1dwEnrollNumberref nameref passwordref privilegref enable); int data1 0int data2 1000000conexaoMySQL = new SqlConnection(ConfigurationManager.ConnectionStrings["ERP_ProjectConnectionString"].ToString()); if (data1 _minute) { //strSQL = "INSERT INTO InOut (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber​,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) VALUES ( '" + dwEnrollNumber + "','" + name + "','" + password + "','" + privileg + "','" + dwVerifyMode + "','" + dwInOutMode + "','" + timeStr + "','" + _machineNumber + "','" + _enrollNumber + "','" + _enrollMachineNumber + "','" + _verifyMode + "','" + _inOutMode + "','" + _year + "','" + _month + "', '" + _day + "','" + _hour + "','" + _minute + "')"; //strSQL = "INSERT INTO InOut (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber​,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) VALUES ( '" + 1 + "','" + "MM" + "','" + "PS" + "','" + 1 + "','" + 1 + "','" + 1 + "','" + "timeStr" + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "', '" + 1 + "','" + 1 + "','" + 1 + "')";
addinmacdll.AddGdata(dwEnrollNumbernamepasswordprivilegdwVerifyModedwInOutModetimeStr_machineNumber_enrollNumber_enrollMachineNumber_verifyMode_inOutMode_year_month_day_hour_minute);
}
Label1.Text _enrollNumber.ToString(); } addinmacdll.AddActdata(); LblMsGError.Text "تم تحميل الحركات "; } // GridView1.DataBind(); 

وبهذا تم الانتهاء والحمد لله وانا معكم فى التواصل على الميل المكتوب اعلاه
والسلام عليكم ورحمه الله