vs2005使用c#开发wince5.0应用程序的相关问题,高手集结号……

时间:2022-07-30 17:32:49
一个手持式设备【wince5.0】带有wifi、蓝牙,扫描功能

最初疑问:

用C++,用MFC,但数据库连接问题不知道怎么解决。数据库(sql2005)在远端服务器上,假设此时设备网络已经连上,该如何访问远端PC的数据库?

但是很快发现c++无法实现上面的功能,于是只能使用c#开发基于wince5.0的智能设备项目

新的问题出现了:

//
//1,使用c#开发不需安装这个设备的sdk了,只需要。net平台就可以了。并且我开发的程序可以在各种模拟器,甚至是我的电
//脑上顺利的运行。可是如果我的程序需要操作比较底层的设备功能时应该如何实现呢?如何用c#实现相关api的接口呢?
//调用C:\Program Files\Windows CE Tools\wce500中的dll吗?可是这些sdk中并没有多少dll,都是需要现编译的吧
//
//





在Windows CE 5.0或Pocket PC 2003 或Sarthpone 2003中,可以使用下面三种方法访问远程数据.
  第一种:
  使用 Web Service 作为中介访问数据,在PDA中可以直接访问安装在访问器上的Web Service,通过Web Service就可以访问远程数据库了.了解Web Service这种方法应该很简单.使用Web Service可以在速度上会稍显得有点慢.
  第二种:
  直接访问数据库
  如果你使用得Sql Server 2000或SQl Server 2005都可以直接访问,如果你使用得Access数据库那就只能用上一种方法了.听PDA公司的人说SQL Server 2000要升级到SP4,但好像我没有升级数据库也可以访问到.大家可以试试看. 如果你是在Vs 2005里开发,就先添加System.Data.SqlClient引用,如下面的一段代码(其实和桌面系统一样访问): SqlConnection conn = new SqlConnection("Server=10.116.192.7;DataBase=smcgz;User ID=salesmng;Password=j6f7j7g2;Persist Security Info=True;");
  try
  {
  SqlCommand cmd = new SqlCommand();
  cmd.CommandText = "select Count(*) from Inventory";
  cmd.Connection = conn;
  conn.Open();
  textBox1 .Text = cmd .ExecuteScalar ().ToString() ;
  }
  catch (SqlException ex)
  {
  MessageBox.Show(ex.Message.ToString ());
  }
  第三种:
  还有只要是直接使用Socket,如果你是写过网络程序的,这应该都知道怎么解决了,把写一个客户端安装在PDA上,在PDA上使用Socket 连接服务器传递数据,当然还得写一个访问器端,开启监听接受客户端的数据,并向将从数据种查询到的数据发送到客户端.使用这种方法就比较复杂和麻烦.

6 个解决方案

#1


在c#中该如何使用目标设备的sdk呢?

比如我需要获得扫描模块获得的数据 在程序中显示……

#2


“用C++,用MFC,但数据库连接问题不知道怎么解决。
数据库(sql2005)在远端服务器上,假设此时设备网络已经连上,
该如何访问远端PC的数据库?
但是很快发现c++无法实现上面的功能”

楼主从何得知c++无法实现上面的功能?
我怎么觉得完全可以。

#3


“如何用c#实现相关api的接口呢?”
c# 或者vb.net不能像c++那样直接调用操作系统的API函数
在使用之前,一般需要做一个声明,比如:
Public Declare Function IsWindowVisible Lib "coredll.dll" (ByVal hwnd As Integer) As Boolean  
Public Declare Function FindWindow Lib "coredll.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr   
Public Declare Function ShowWindow Lib "coredll.dll" (ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Integer  

这是vb的声明,c#类似。
coredll.dll是wince操作系统最核心的dll。

#4


private void button2_Click(object sender, EventArgs e)
        {
            string connString = "Data Source=192.168.1.3;user id=sa;pwd=sa;Initial Catalog=ghxtest";
            
            SqlConnection conn = new SqlConnection(connString);
            try
            {
                conn.Open();
                //MessageBox.Show("连接成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
                SqlCommand mycmd = conn.CreateCommand();
                
                //insert or update
                //mycmd.CommandText = "insert into stu values('6s','136')";
                //mycmd.ExecuteNonQuery();
                mycmd.CommandText = "select stuname from stu ";//where stuid='111'";
                SqlDataReader drdr = mycmd.ExecuteReader();
                while (drdr.Read())
                {
                    MessageBox.Show(drdr.GetString(0), "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
                }

            }
            catch (SqlException se)
            {
                MessageBox.Show("连接失败!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
                //log.Error(se.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show("连接失败!" + ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
                //log.Error(ex.ToString());
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }


“比如我需要获得扫描模块获得的数据 在程序中显示……”
不知道是些什么扫描模块?,一般都是通过串口。

#5


引用 2 楼 joyzml 的回复:
“用C++,用MFC,但数据库连接问题不知道怎么解决。
数据库(sql2005)在远端服务器上,假设此时设备网络已经连上,
该如何访问远端PC的数据库?
但是很快发现c++无法实现上面的功能”

楼主从何得知c++无法实现上面的功能?
我怎么觉得完全可以。


谢谢你的答复。

你能否举例说明一下呢?
这几天找了相关的资料。使用c++的话,发现wince需要安装sqlce 然后通过adoce进行连接  达到的目的是同步本地数据库和远程数据。

不知道你的方法是什么。wince上的开发还是刚接触,我的一些认识可能比较肤浅还请见谅

#6


引用 3 楼 joyzml 的回复:
“如何用c#实现相关api的接口呢?”
c# 或者vb.net不能像c++那样直接调用操作系统的API函数
在使用之前,一般需要做一个声明,比如:

VB.NET code
Public Declare Function IsWindowVisible Lib "coredll.dll" (ByVal hwnd As Integer) As Boolean  
Public Decla……



引用 4 楼 joyzml 的回复:
“比如我需要获得扫描模块获得的数据 在程序中显示……”
不知道是些什么扫描模块?,一般都是通过串口。



我的设备是一个条形码扫描器,带液晶的。
我知道他操作系统的核心是wince5.0
也就是可以引用"coredll.dll实现大部分的功能。
针对条形码扫描这一块,应该是在wince基础上扩展出来的。那么想获得这部分的数据的话,应该是如何处理的呢?在C:\Program Files\Windows CE Tools\wce500中找对应的dll吗?并且是放到我的程序所在文件夹中?

我对底层的机制还不是很了解。还请包涵。

另外,网上说用c#开发wince程序,完全不需要安装设备的sdk.那么这个sdk也就没有价值了吗

#1


在c#中该如何使用目标设备的sdk呢?

比如我需要获得扫描模块获得的数据 在程序中显示……

#2


“用C++,用MFC,但数据库连接问题不知道怎么解决。
数据库(sql2005)在远端服务器上,假设此时设备网络已经连上,
该如何访问远端PC的数据库?
但是很快发现c++无法实现上面的功能”

楼主从何得知c++无法实现上面的功能?
我怎么觉得完全可以。

#3


“如何用c#实现相关api的接口呢?”
c# 或者vb.net不能像c++那样直接调用操作系统的API函数
在使用之前,一般需要做一个声明,比如:
Public Declare Function IsWindowVisible Lib "coredll.dll" (ByVal hwnd As Integer) As Boolean  
Public Declare Function FindWindow Lib "coredll.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr   
Public Declare Function ShowWindow Lib "coredll.dll" (ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Integer  

这是vb的声明,c#类似。
coredll.dll是wince操作系统最核心的dll。

#4


private void button2_Click(object sender, EventArgs e)
        {
            string connString = "Data Source=192.168.1.3;user id=sa;pwd=sa;Initial Catalog=ghxtest";
            
            SqlConnection conn = new SqlConnection(connString);
            try
            {
                conn.Open();
                //MessageBox.Show("连接成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
                SqlCommand mycmd = conn.CreateCommand();
                
                //insert or update
                //mycmd.CommandText = "insert into stu values('6s','136')";
                //mycmd.ExecuteNonQuery();
                mycmd.CommandText = "select stuname from stu ";//where stuid='111'";
                SqlDataReader drdr = mycmd.ExecuteReader();
                while (drdr.Read())
                {
                    MessageBox.Show(drdr.GetString(0), "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
                }

            }
            catch (SqlException se)
            {
                MessageBox.Show("连接失败!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
                //log.Error(se.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show("连接失败!" + ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
                //log.Error(ex.ToString());
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }


“比如我需要获得扫描模块获得的数据 在程序中显示……”
不知道是些什么扫描模块?,一般都是通过串口。

#5


引用 2 楼 joyzml 的回复:
“用C++,用MFC,但数据库连接问题不知道怎么解决。
数据库(sql2005)在远端服务器上,假设此时设备网络已经连上,
该如何访问远端PC的数据库?
但是很快发现c++无法实现上面的功能”

楼主从何得知c++无法实现上面的功能?
我怎么觉得完全可以。


谢谢你的答复。

你能否举例说明一下呢?
这几天找了相关的资料。使用c++的话,发现wince需要安装sqlce 然后通过adoce进行连接  达到的目的是同步本地数据库和远程数据。

不知道你的方法是什么。wince上的开发还是刚接触,我的一些认识可能比较肤浅还请见谅

#6


引用 3 楼 joyzml 的回复:
“如何用c#实现相关api的接口呢?”
c# 或者vb.net不能像c++那样直接调用操作系统的API函数
在使用之前,一般需要做一个声明,比如:

VB.NET code
Public Declare Function IsWindowVisible Lib "coredll.dll" (ByVal hwnd As Integer) As Boolean  
Public Decla……



引用 4 楼 joyzml 的回复:
“比如我需要获得扫描模块获得的数据 在程序中显示……”
不知道是些什么扫描模块?,一般都是通过串口。



我的设备是一个条形码扫描器,带液晶的。
我知道他操作系统的核心是wince5.0
也就是可以引用"coredll.dll实现大部分的功能。
针对条形码扫描这一块,应该是在wince基础上扩展出来的。那么想获得这部分的数据的话,应该是如何处理的呢?在C:\Program Files\Windows CE Tools\wce500中找对应的dll吗?并且是放到我的程序所在文件夹中?

我对底层的机制还不是很了解。还请包涵。

另外,网上说用c#开发wince程序,完全不需要安装设备的sdk.那么这个sdk也就没有价值了吗