# Native Code > برنامه نویسی موبایل > Windows Phone و Windows Mobile >  بانک های اطلاعاتی در سیستم های CE

## meh_secure

سلام دوستان.

می خواستم در مورد بانک های اطلاعاتی پشتیبانی شده در سیستم های CE اطلاعاتی کسب کنم. 
آیا این بانک ها نوع خاصی از بانک ها هستند یا طبق استانداردهای بانک های معمولی مثل اکسس یا پیشرفته تر مثل sql server هستند؟؟
اگر می دونید توضیح بدید.

----------


## neo_matrix

باید بگم که داخل PPC از دو مدل پایگاه داده استفاده شده. یکی به صورت SQL Server CE و یکی هم به صورت XML. البته در مورد دوم مسلما از امکانات پیشرفته اولی محروم می شویم ولی سرعتش بسیار بالاتر است.

----------


## meh_secure

ممنون. ولی یه مقدار دیر جواب دادین.

----------


## moalla

میشه برای اتصال به xml توضیح بدین. لطفا یک نمونه کد و یا یک مثال رو بذارین.
من خیلی توی اینترنت گشتم اما مثالی برای اون پیدا نکردم. واقعا گیج شدم. نمیدونم آیا درست هست که از SQL سرور استفاده کنم در حالی که معمولا روی موبایلها نصب نیست؟

----------


## iman_s52

میشه در مورد اتصال به SQL Server توضیح بدین .
من از یه دستگاه DataCollectionکه روش WinCE 5 نصب هست دارم استفاده می کنم میخوام ببینم میشه از طریق WiFi مستقیم به بانک اطلاعاتی که دارم وصل بشم .
کلاس sqlClient رو که Use کردم همه امکانات SQL رو گذاشت ولی میخوام بدونم کار درستیه و یا امکانش هست ؟؟؟؟؟؟؟؟

----------


## neo_matrix

ببینید، اگه بخواهید از کدنویسی استفاده کنید، کافی است که از طریق کد جداول و فیلدهای هر جدول را تعریف کنید. سپس یک DataSet تعریف کرده و ارتباطات با کنترلهای فرم دادهای خود را تعریف می کنید.
اگر بخواهید ویژوالی عمل کنید، کافی است تا از قسمت project منوی ADD NEW Item را انتخاب کنید و یک DataSet به برنامه خو اضافه نمایید. DataSet ایجاد شده کاملا شبیه یک DataBase عمل می کند و شما می توانید جداول جدید، فیلدها و روابط جداول را در آن تعبیه کرده و در برنامه های خود یا از طریق DataBinding و یا کد نویسی داده های خود را به آن اضافه کنید.
نکته اصلی کار با DataSet در این می باشد که این کنترل تابعی دارد که می تواند اطلاعات درون خود را به صورت XML بر روی دیسک ذخیره کند و یا همان فایل را بازخوانی نماید.WriteXml و ReadXml.

اگر بخواهید با جداول SQL در برنامه های خود کار کنید، باید SQL Server 2005 را همراه با امکانات موبایل آن نصب کنید. پس از نصب گزینهای به Visual Studio اضافه می شود که شما می توانید به پروژه های خود که برای موبایل و یا CE می نویسید یک Database از نوع SQL اضافه نمایید. این Database ها همانند Database Access بر روی دستگاه عمل می کند، به این معنی که برای اتصال به آنها فقط کافی است در Connection خود آدرس فایل مربوطه را مشخص نمایید. مابقی قضایا کاملا با برنامه نویسی پایگاه داده در Visual Studio یکی می باشد.
به یاد داشته باشید برای ساختن یک Setup برای نصب برنامه خود چند فایل وجود دارند که باید برروی دستگاه مریوطه نصب شوند تا آن دستگاه بتواند برنامه های شما را اجرا کنند.نام این فایل ها را رو می تونید از HELP برنامه های خود بدست آورید.
اگه می دونید که حتما باید یک مثال داشته باشی تا نحوه کار را متوجه بشین بگین تا یه برنامه بنویسم و اینجا کدشو براتون بزارم.

اینکه می شه با WiFi به این اطلاعات دسترسی داشته باشید و یا نه واقعا اطلاعی ندارم. ولی توصیه می کنم به دو سایت زیر یک سری بزن چون تا امروز برای من شدیدا یاری رسان و خوب بودن:
www.codeproject.com
msdn.microsoft.com

----------


## reza6384

سلام. من در ادامه مطالب دوستان این پیشنهاد رو می دم که شما ببینید که احتیاج شما برای استفاده از Database به صورت Online هست (یعنی هر لحطه DB روی Devive شما بخواد با Server عمل Synchronize رو انجام بده ) یا اینکه Offline هست و می شه بهد از یک سری تراکنش ها Synchronization رو انجام داد. اگر Offline کارتون رو راه میندازه همونجور که گفته شد اون قسمت دیتابیس رو که لازم دارید توی یک دیتاست بریزید و با استفاده از متد WriteXml دیتابیس رو روی فایل بریزید و توی Device با متد ReadXml اون رو بخونید.
اما اگز می خواین که Online کار کنید باید
Microsoft Sql Server 2005 Mobile Edition Server Tools  یا Microsoft Sql Server 2005 Compact Edition رو روی دستگاهتون نصب کنید.

SQL Server Mobile Edition برای دستگاه هایی که Windows Mobile دارن و Sql Server Compact Edition برای دستگاه هایی هست که Windows CE دارن. فایل ها رو با توجه به OS دستگاهتون دانلود کنید.


هر کدوم این نرم افزارها شامل دو قسمت Server tools  و Device SDK هستن. Server tools برای استفاده از این دیتابیس ها روی PC  و Device SDK برای نصب 
Sql Server روی Device هستند.

1- Microsoft Sql Server 2005 Mobile Edition Server tools (Sqlce30setupen.msi) : 
http://www.microsoft.com/downloads/d...displaylang=en
2-Microsoft Sql Server 2005 Mobile Edition Device SDK(SqlMobile30DeviceSdkENU.msi) :
http://www.microsoft.com/downloads/d...displaylang=en
**************************************************  **************************************************  **
3-Microsoft Sql Server 2005 Compact Edition Server tools(Sqlce30setupen.msi) :
http://www.microsoft.com:80/download...displaylang=en
4-Microsoft Sql Server 2005 Compact Edition Device SDK(SSCE31SDK-ENU.msi) : 
http://www.microsoft.com/downloads/d...displaylang=en


بعد از این که این روهم دانلود و نصب کردید باید سه تا فایل CAB به نام های 
sqlce30.wce5.armv4i
sqlce30.repl.wce5.armv4i
sqlce30.dev.ENU.wce5.armv4i
رو از مسیر 
C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Device\Mobile\v3.0\wce500\armv4i
یا
C:\Program Filess\Microsoft Sql Sevrer Compact Edition\v3.1\SDK\bin\wce500\armv4i

رو روی Device تون کپی کنید و از روی خود Device این فایل های CAB رو اجرا کنید. بعد SQL Server CE 2.0 روی Device شما نصب می شه.
البته ARMv4i نوع پردازنده دستگاه من بود و شما باید برای دستگاه خودتون از فولدر مربوط به همون نوع پردازنده فایل های CAB رو کپی کنین. 
نوع پردازنده شما هم موقع Deploy کردن یک برنامه از visual studio  روی Device  تون مشخص می شه و توی Status bar پایین صفحه یک مسیر نوشته می شه
که اون مسیر نشون می ده دستگاه شما چه نوع پردازنده ای داره. مثلا مسیری که برای من نشون می داد این بود :
C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\Windo  wsCE\wce500\armv4i

بعد از نصب اگر درست نصب کرده باشین از روی کامپیوترتون می تونید یه پایگاه داده جدید روی Device بسازید که یک فایل با فرمت SDF هست.
بعد از همه این داستان ها تازه کار شروع می شه و باید یک Publication تعریف کنید و بعد هم Subscription و Login و این داستانها که تو Site زیر نوشته :
http://www.softwaregreenhouse.com/Ho...w/Default.aspx
در آخر باز هم می گم که اگر کارتون Offline هست Xml خیلی راحت تره.

----------


## iman_s52

با سلام 
خدمت دوست گرامی
بالاخره بعد 8 ماه یکی پیدا شد یه جواب درست و حسابی به ما بده !!!!!!!!
خوب البته منم تا حدودی مشکلاتم حله نه تماماً
از طزق WiFi تونستم به دیتا بیسم وصل بشم و همچنین با استفاده از ‍XML تونستم اطلاعاتم رو بصورت Offline جابجا کنم و تا حدودی کارم راه افتاده .
به نظر شما این روشی که شما لطف کردین توضیح دادین بهتره و کم دردسر تره یا SQL‌‌CE  ؟؟؟ 
در ضمن من با SQL 2000  کار میکنم ؟ مشکلی داره یا نه ؟؟؟؟ 
من تونستم SQL CE رو روی Device ام نصب کنم و با اون یه دیتا بیس بسازم ولی اینکه چطوری تویه ویندوزم ازش استفاده کنم رو دیگه نتونستم !!!!!! 
راستی شما خودتون از این روش استفاده کردین ؟؟؟؟

----------


## reza6384

> با سلام 
> خدمت دوست گرامی
> بالاخره بعد 8 ماه یکی پیدا شد یه جواب درست و حسابی به ما بده !!!!!!!!
> خوب البته منم تا حدودی مشکلاتم حله نه تماماً
> از طزق WiFi تونستم به دیتا بیسم وصل بشم و همچنین با استفاده از ‍XML تونستم اطلاعاتم رو بصورت Offline جابجا کنم و تا حدودی کارم راه افتاده .
> به نظر شما این روشی که شما لطف کردین توضیح دادین بهتره و کم دردسر تره یا SQL‌‌CE ؟؟؟ 
> در ضمن من با SQL 2000 کار میکنم ؟ مشکلی داره یا نه ؟؟؟؟ 
> من تونستم SQL CE رو روی Device ام نصب کنم و با اون یه دیتا بیس بسازم ولی اینکه چطوری تویه ویندوزم ازش استفاده کنم رو دیگه نتونستم !!!!!! 
> راستی شما خودتون از این روش استفاده کردین ؟؟؟؟


به نظر من XML خیلی راحت تره، چون کارخود من Offline بود به محض اینکه دیدم XML چقدر کارم رو راحت می کنه ازش استفاده کردم.

اما راجع به SqlServer2000 اینو باید بگم که باید 
Sql Server 2000 Service Pack 4 Replication Components 
رو نصب کنید، اگر نصب نکنید نمی تونید اطلاعات رو با SqlServer2005 Mobile Edition ،
Synchronize کنید، این Pack ها هم دردسر داره، بهتره 2005 نصب کنید و دیتابیستون رو از 2000 Backup بگیرید و توی 2005 Restore کنید. در ضمن آقای فرشاد شریف Farshad_Sh این کار رو کامل انجام دادن، من بهشون PM زدم و راهنماییم کردم. اطلاعاتشون در این زمینه کاملتره.
اگر شما می خواهید اطلاعات رو از طریق WiFi بتونید Synch کنید اول تا مراحلی که توی سایت SoftwareGreenHouse نوشته پیش برید ، بعدش دیگه ساده میشه و از آقای شریف سوالتون رو بپرسید، من چون تجهیزات Wireless نداشتم دیگه از اونجا به بعدش رو پیش نرفتم.

----------


## iman_s52

ممنون از توجهتون 
شما با XML سرعتتون پایین نمیاد ؟؟؟؟ آخه من ممکنه یبار بخوام 4 - 5 هزار رکورد رو توش بخوام بریزم ؟؟
کلا چطوری باهاش کار میکنین .؟

----------


## reza6384

> ممنون از توجهتون 
> شما با XML سرعتتون پایین نمیاد ؟؟؟؟ آخه من ممکنه یبار بخوام 4 - 5 هزار رکورد رو توش بخوام بریزم ؟؟
> کلا چطوری باهاش کار میکنین .؟


چرا، سرعت پایین میاد، اما کار کردن باهاش راحتتره دیگه. بالاخره یا خدا یا خرما.

اگر منظورت از طریقه کار با XML هست این کد ساده 

*XML Writer:*


Dim Conn As New SqlConnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True")
Conn.Open()
Dim Query As String = "Select * From Customers"
Dim DS As New DataSet
Dim Result As New DataTable("Result")
DS.Tables.Add(Result)
Dim SDA As New SqlDataAdapter(Query, Conn)
SDA.Fill(DS, "Result")
DS.WriteXml("C:\Northwind_Customers.xml")


*XML Reader :*


Dim DS As New DataSet
DS.ReadXml("C:\Northwind_Customers.xml")
DataGridView1.DataSource = DS
DataGridView1.DataMember = "Result"

----------


## Identifier

> من تونستم SQL CE رو روی Device ام نصب کنم و با اون یه دیتا بیس بسازم ولی اینکه چطوری تویه ویندوزم ازش استفاده کنم رو دیگه نتونستم !!!!!!


اگر منظورت رو درست فهمیده باشم یکی از راه کار های بسیار ساده برای دستیابی اطلاعات به صورت online با استفاده از امکانات شبکه و همچنین Sql server desktop به شکل زیر است :

ایتدا یک وب سرویس ایجاد کن و دو تا تابع از نوع [WebMethod] یکی برای اجرای کوئری های select و یکی هم برای اجرای کوئری های insert و update بنویس که خروجی تابع اول میتونه دیتا ست باشه  :


 public DataSet queryexec(string query)
    {
        SqlConnection SqlCnn = new SqlConnection(cnn1);
        SqlCnn.Open();
        SqlCommand SCmd = new SqlCommand(query, SqlCnn);
        SqlDataAdapter Dapt = new SqlDataAdapter(SCmd);
        DataSet ds = new DataSet();
        Dapt.Fill(ds);
        SqlCnn.Close();
        return (ds);
    }
    [WebMethod]
    public int InsertQuery(string SQL)
    {
        SqlConnection scnn = new SqlConnection(cnn1);
        SqlCommand cmd = new SqlCommand(SQL, scnn);
        cmd.CommandType = CommandType.Text;
        try
        {
            scnn.Open();
            cmd.ExecuteNonQuery();
            scnn.Close();
            return 1;
        }
        catch
        {
            return 0;
        }
    }

توجه داشته باش که اینها فقظ و فقظ مثال های ساده هستند و از نظر امنیت و بهینه سازی باید نهایت دقت را بکار ببندی.

پس ازاینکه از روال عملکرد وب سرویست مطمئن شدی اون را بارگذاری کن

پروژه Pocket Pc Windows Application مربوطه را باز کن و یک Web Refrence جدید ایجاد کن و مسیرش را برابر با وب سرویس مربوطه قرار بده .

سپس میتونی با استفاده از یک همچین کدی فراخوانی های مربوطه را انجام بدی و نتیجه را درون گرید نمایش بدی:

        public void GetList()
        {
            string sql = "select * from test";
            TestWebReference.Service TestSrv = new TestWebReference.Service();
            DataSet ListDS = new DataSet();
            ListDS = TesttSrv.queryexec(sql);
            dataGrid1.DataSource = ListDS.Tables[0];
            dataGrid1.Refresh();
        }
به همین ترتیب هم میتونی تابعی بنویسی که وظیفه پارس کردن کوئری های insert و آپدیت باشه .

منتها این موارد فقط نمونه ای صرفاً جهت  نشان دادن نحوه عملکرد دریافت اطلاعات به صورت online بود.

موفق باشی

----------


## iman_s52

> چرا سرعت پایین میاد، اما کار باهاش راحت تره دیگه. اگر منظورت نحوه کار با XML  هست :
> 
> *XML Writer :*
> 
> 
> Dim Conn AsNew SqlConnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True")
> Conn.Open()
> Dim Query AsString = "Select * From Customers"
> Dim DS AsNew DataSet
> ...


ممنون از توجهتون . 
منم خودم از این روش استفاده کردم . مخواستم بدونم روشی دیگه ای هم هست ؟؟؟ 
واسه باز کردن اولیه فایل XML حدود 3- 4  دقیقه طول میکشه . نمی دونم این زمان رو میشه کاهش داد ؟؟؟ میشه کاریش کرد ؟؟؟؟

جناب Identifier عزیر ممنون از توجهتون ولی من اصلان تو زمینه Web آشنایی ندارم ولی واسه OnLine بودن هم مثل روش های معمولی ( ویندوزی ) عمل کردم

----------


## Identifier

> واسه باز کردن اولیه فایل XML حدود 3- 4 دقیقه طول میکشه . نمی دونم این زمان رو میشه کاهش داد ؟؟؟ میشه کاریش کرد ؟؟؟؟


این قضیه وابسته به عامل های زیادی میتونه باشه :

1- سرعت پردازنده، حافظه و نرخ انتقال  اطلاعات دستگاه مورد استفاده قرار گرفته،قطعاً به تناسب مشخصات فنی دستگاه و میزان حجم فایل مورد نظر زمانی جهت واکشی رکورد ها به طول خواهد انجامید.

2- ساختار فایل XML ، نحوه ساختار فایل XML و همچنین تعداد رکورد ها و فیلد های مربوطه نیز در این قضیه تاثیر گذار هستند، بعضاً فیلد هایی که مقادیر آن حاصل پردازش از سایر فیلد ها هستند چنانچه از فایل اصلی حذف گردند و سمت دستگاه مربوطه پردازش شوند در بعضی موارد باعث افزایش سرعت و راندمان می شود.

3 - نحوه فراخوانی و Load کردن آنها ، به تناسب ساختار برنامه و فایل شما روش ها فراخوانی متعددی وجود دارد که هر کدام میتوانند کارایی ها متفاوتی داشته باشند.

----------


## iman_s52

با سلام
اگه یه بار با متد WriteXML فایلم رو بسازم بعد برای دفعه بعد بخوام به تهش رکورد جدید اضاقه کنم اطلاعات قبلی پاک میشه چطور میشه این مشکل پیش نیاد ؟؟؟ راه حلی داره که فقط با همین متد WriteXML اینکار رو کرد‌؟؟

----------


## reza6384

چرا، با XML سرعت پایین میاد، ولی دقیقا نمی شه گفت که چقدر. بیشترش هم به خاطر عملیات I/O Bound اش هست. اما چیزی که واضحه اینه که وقتی رکوردها رو از طریق XML انتقال میدیم بعدش یه مقداری نسبت به Sql CE محدودیت داریم. ولی من سعی می کنم دقیقا زمان اضافه شدن مثلا 3000 تا رکورد رو توی XML و SQL Server CE دقیق تر حساب کنم و اینجا بذارم. الان خودم توی یه Windows Application جدول ها رو از SQL Server می خونم و دونه دونه تو SQL Server CE ، درج می کنم که این کار هم طول می کشه.

----------


## reza6384

من توی دیتابیس برنامه ام که روی PC هست یک جدول کالا دارم. الان 1000 تا رکورد توشه، یه برنامه روی Pocket PC دارم که با SqlCE2 کار می کنه و این کالاها رو ورود و خروج می زنه.
وقتی می خوام کالاها رو از Sql2k بخونم و توی SqlServerCE2 بخوام Insert کنم، حدود 2-1 دقیقه طول می کشه. مشکل دیگه اینه که وقتی این دیتابیس می ره روی Device ام نام کالاهاش ( که فارسیه ) جدا و برعکسه که باید 1000 تا رکورد رو Update کنم. این کار هم روی Pocket PC حدود 3-2 دقیقه طول می کشه. حالا، به نظر شما زمان 1000 تا Insert  با 1000 تا Update به علاوه اینکه چک کنم کالای جدیدی تعریف نشده باشه فرق داره؟

----------


## iman_s52

سلام
شما همون موقه Insert مشکل فارسیتون رو حل کنین چرا یه بار Insert می کنی بعد کل دیتا رو Update میکنی ؟؟؟؟

----------


## reza6384

اگر می شد که خوب بود، هر کاراکتر فارسی 5 تا کد داره : Character,Alone,End,First,Middle که Character یک کد هگزادسیمال سه رقمیه و بقیه 4 رقمی هستن. مشکل اینه که وقتی رشته فارسی رو روی PC نگاه می کنم کدهاش درسته(یعنی یا َalone یا End یا First یا Middle، یعنی کد کاراکتر ها با توجه به موقعیتشونه، اما وقتی که Convert می شه می ره توی Device، کدها می شه کد Character که جداجدا و برعکسه. اینه که مجبورم اونطرف Update کنم.

----------


## farhad-s

> سلام. من در ادامه مطالب دوستان این پیشنهاد رو می دم که شما ببینید که احتیاج شما برای استفاده از Database به صورت Online هست (یعنی هر لحطه DB روی Devive شما بخواد با Server عمل Synchronize رو انجام بده ) یا اینکه Offline هست و می شه بهد از یک سری تراکنش ها Synchronization رو انجام داد. اگر Offline کارتون رو راه میندازه همونجور که گفته شد اون قسمت دیتابیس رو که لازم دارید توی یک دیتاست بریزید و با استفاده از متد WriteXml دیتابیس رو روی فایل بریزید و توی Device با متد ReadXml اون رو بخونید.
> اما اگز می خواین که Online کار کنید باید
> Microsoft Sql Server 2005 Mobile Edition Server Tools یا Microsoft Sql Server 2005 Compact Edition رو روی دستگاهتون نصب کنید.
> 
> SQL Server Mobile Edition برای دستگاه هایی که Windows Mobile دارن و Sql Server Compact Edition برای دستگاه هایی هست که Windows CE دارن. فایل ها رو با توجه به OS دستگاهتون دانلود کنید.
> 
> 
> هر کدوم این نرم افزارها شامل دو قسمت Server tools و Device SDK هستن. Server tools برای استفاده از این دیتابیس ها روی PC و Device SDK برای نصب 
> Sql Server روی Device هستند.
> ...


لینک آخری error میده Server Error in '/' Application.
لطفا یک لینک سالم معرفی کنید .

----------


## farhad-s

> به نظر من XML خیلی راحت تره، چون کارخود من Offline بود به محض اینکه دیدم XML چقدر کارم رو راحت می کنه ازش استفاده کردم.
> 
> اما راجع به SqlServer2000 اینو باید بگم که باید 
> Sql Server 2000 Service Pack 4 Replication Components 
> رو نصب کنید، اگر نصب نکنید نمی تونید اطلاعات رو با SqlServer2005 Mobile Edition ،
> Synchronize کنید، این Pack ها هم دردسر داره، بهتره 2005 نصب کنید و دیتابیستون رو از 2000 Backup بگیرید و توی 2005 Restore کنید. در ضمن آقای فرشاد شریف Farshad_Sh این کار رو کامل انجام دادن، من بهشون PM زدم و راهنماییم کردم. اطلاعاتشون در این زمینه کاملتره.
> اگر شما می خواهید اطلاعات رو از طریق WiFi بتونید Synch کنید اول تا مراحلی که توی سایت SoftwareGreenHouse نوشته پیش برید ، بعدش دیگه ساده میشه و از آقای شریف سوالتون رو بپرسید، من چون تجهیزات Wireless نداشتم دیگه از اونجا به بعدش رو پیش نرفتم.


میشه آدرس سایت SoftwareGreenHouse را کامل بنویسید و بگویید در کدام قسمت توضیح داده . با تشکر

----------


## arashkhaan2002

آیا از ODBC (واسه کانکشن با بانک های اطلاعاتی غیر از SQL)میشه روی WIndows mobile استفاده کرد؟

----------


## arashkhaan2002

این یه برنامه جالب واسه ساختن app , exe واسه pocket pc و کار با بانک های اطلاعاتی.

http://www.fivetechsoft.com/english/fwppc.html

----------

