随笔 - 14  文章 - 0 评论 - 8 trackbacks - 0

摘要: 最近这一两年MVC.net逐渐发展,越来越走向成熟,逐渐被许多.net WEB开发程序员所接受。当发展到MVC3.0的时候,已经相当完善了,如今MVC4.0 Beta版已经出来了。MVC3.0-EF是WEB开发中最为常见的模式。ADO.NET EntityFramerwork使用通常有三种方式:DataBase First,Model First,Code First。通常前面两种比较简单,能快速生成类似数据源的控件使用,ADO.NET EntityFramerwork使用会生成edmx的文件,而且是可视的,一般是小型项目的最爱,但不使用于大型的WEB开发项目。原因有:如果在开发的过程中发现需阅读全文
posted @ 2012-04-27 11:17 Alvin_jstu 阅读(22) 评论(0) 编辑

最近这一两年MVC.net逐渐发展,越来越走向成熟,逐渐被许多.net WEB开发程序员所接受。当发展到MVC3.0的时候,已经相当完善了,如今MVC4.0 Beta版已经出来了。
MVC3.0-EF是WEB开发中最为常见的模式。ADO.NET EntityFramerwork使用通常有三种方式:
DataBase First,Model First,Code First。
通常前面两种比较简单,能快速生成类似数据源的控件使用,ADO.NET EntityFramerwork使用会生成edmx的文件,而且是可视的,一般是小型项目的最爱,但不使用于大型的WEB开发项目。原因有:如果在开发的过程中发现需要修改数据库字段,edmx文件需要刷新,有的时候可能还会刷新不了,要删除重新创建。而且这种控件的使用,程序会觉得臃肿。
CodeFirst方式可摆脱数据库的束缚,可自定义中间属性,有较大的灵活性,更利于大型项目的开发。下面介绍一下Code First的安装,和安装时经常出现的问题,和大家一起分享。
ADO.NET EntityFramerwork的安装,可在Microsoft msdn官网下载,g谷歌一下下载.EXE文件进行安装就行。安装完成后在引用程序集里会有System.Data.Entity的引用集,说明你已经安装成功了。新建一根MVC3.0的应用程序,创建一个类引用Dbcontext,如图:


我们会发现基类Dbcontext类下面有浪线,这是因为我们没有引用EntityFramerwork.dll类,但我们在引用程序集里是没有这个类的。
所以我比较支持使用NuGet来完成EF的安装。什么是NuGet呢?
Nuget是微软的一种用来进行扩展的一种工具,是免费的。它的使用一个Nuget的管理器,输入扩展地址进行扩展。如图:


还有就是通过VS2010进行安装,使用PM来完成EF,CodeFirst的安装(如果你是VS2010旗舰版的,PM是最好的方式),可参照这个哥们的http://www.cnblogs.com/ASPNET2008/archive/2011/12/13/2286244.html
在使用PM就行安装的时候我们通常会出现下面的错误。(一出现这种情况,我们第一感觉就是谷歌一下,找到这样的问题,可惜论坛上没人回答,这是我们会失望到极点。)如图:
这种情况往往是因为你的电脑访问网站的证书出了问题,你赋值NuGet下载EF远程网址输入到IE浏览器中,你会发现会弹出一个“安全警告”,就是这个警告让你在PM时无法直接与相应的网站就行远程访问和数据下载。如图:

http://go.microsoft.com/fwlink/?LinkID=230447

这种错误谷歌一下,其实是有解决方案的。首现你应该检查一下证书的日期有没有过期。其具体方案,可参考这哥们的方案:http://jeffyyko.blog.51cto.com/28563/142280/,在该方案中我比较赞同第二种方案,这方案也是最简单的。

但在启用“证书”插件的时候,也经常会遇到一点小麻烦,但千万不要因为繁琐,就放弃了尝试,因为你离成功已经不远了。在添加插件的时候,操作系统会停止IIS服务,重新安装IIS服务,有个别系统可能在安装的时候,发现缺少文件。这是你可找一张当前机器的系统盘,或者直接下载一个镜像文件,如果是X86系统通常缺少的文件就在I386里。当“证书服务”安装好后,打开浏览器,输入刚才的网址,你会发现警告窗口消失了。这说明你成功了。

然后打开VS2010的一个MVC3.0的项目使用PM可完成EF,CodeFirst的安装。

PM> get-package -remote -filter entityframework

PM> install-package -id EntityFramework

You are downloading EntityFramework from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=242868. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'EntityFramework 4.3.1'.
Successfully added 'EntityFramework 4.3.1' to MvcBOOK.

 

你会发现Dbcontext上的浪线消失了,你可以进行MVC3.0-EF-CodeFirst的学习了。

posted @ 2012-04-27 11:17 Alvin_jstu 阅读(22) 评论(0) 编辑

好像是天生的,我这个人就是不喜欢跟人家装机器。不过前天公司实在是没有事情做,跟同时一起外出客户去跟他们装服务器(DELL)的。

本想可以早点回家的,没想到系统装不上去,报错“缺少文件percsas.sys”文件,刚开始以为是可能系统盘位数出问题了,32位换了个64的结果还是一样。

后来重新用引导盘操作了一次,还是有问题。

后来发现硬盘驱动没装好,服务器一盘会有两个硬盘,ctrl-r-c重新清空DVgrm,配置相关信息,要保证在服务器运行时两个硬盘的指示灯都在闪动。那说明你

离胜利不远了。

posted @ 2012-02-22 10:09 Alvin_jstu 阅读(37) 评论(0) 编辑

最近开发winform项目,经常用到ComboBox控件,可能是winform做得少,数据绑定的时候,出现了一个问题,让我琢磨了好久。

问题如下:

combobox.DataSourse=oneTable;

combobox.VlueMember="ccode";//绑定oneTable中的字段

combobox.DisplayMember="ccusmer";绑定oneTable的字段

oneTable表的结构如下:

     ccode    ccusmer

     1           one

     2           two

按照常理,当你运行程序后,在Combobox控件下拉菜单中的选项应该是“one,two”,但奇怪的是显示的下拉项是“1,2”;

很奇怪。后来终于发现了原因(引用百维科技):

ComboBox的DataSource属性为object类型,但是需要实现IListSource接口的类型。

当把DataTable赋值给该属性后,如果此时没有指定ComboBox的DisplayMember和ValueMember属性的话,这时获得的ComboBox的SelectValue属性将是System.Data.DataRowView的一个实例。

据此推测DataTable中实现的IListSource接口中的GetList()方法应该返回的是DataTable的DefaultView,也就是DataView的一个实例是DataRowView的集合。

而因为没有指定DisplayMember和ValueMember属性,所以ComboBox直接把DataView中的每一个DataRowView实例填充到列表中。这样的话就可能在ComboBox的SelectedIndexChanged事件处理中产生错误。

所以:

combobox.VlueMember="ccode";//绑定oneTable中的字段

combobox.DisplayMember="ccusmer";绑定oneTable的字段

combobox.DataSourse=oneTable;

先绑定列,再绑定数据源,问题就解决了。

这时combobox.Text的值应该是“one,two”,combobox.SelectVlue的值应该是“1,2”
 

posted @ 2011-08-19 16:06 Alvin_jstu 阅读(452) 评论(0) 编辑

命运弄人,一不小心掉进了条码行业。。。。

条码行业目前终端操作通信方式有两种:无线通信,有限通信。终端与PC和ERP控制的数据库的数据同步是物联网,也是条码扫码等操作同步的关键。

目前数据同步的方式有好几种,思路如下:将mobile sql 的sdf格式的数据库在PC上配置好(当然是用代码去操作了)以后,通过OpenNETCF提供的方法,同步到PDA,俗一点说,就是把带有数据的sdf 数据库拷贝到PDA上,然后,您PDA上程序就可以对该sdf数据库进行一系列操作了,相反,也可以把PDA上的sdf数据库同步到PC,用PC上的程序对sdf数据库进行操作。

OpenNETCF.Desktop.Communication.DLL

该程序集实现了终端与PC端文件传送的API,里面的方法如下:

Connect 建立与设备的同步连接。
CopyFileFromDevice 将设备中的文件复制到 PC。
CopyFileOnDevice 将设备某个位置的文件复制到设备的另一新位置。
CopyFileToDevice 将 PC 中的文件复制到设备。
CreateDeviceDirectory 在设备中创建目录。
CreateProcess 启动设备中的应用程序。
DeleteDeviceFile 删除设备中的文件。
DeviceFileExists 检查设备中是否存在文件。
Disconnect 中断与设备的连接。
EnumFiles 提供与 FileName 参数提供的条件相匹配的FileInformation 类数组列表。
GetDeviceCapabilities 检索设备的特定设备信息。
GetDeviceFileAttributes 检索特定设备文件的属性。
GetDeviceFileSize 检索设备文件的大小,以字节为单位。
GetDeviceFileTime 检索设备文件的日期时间。
GetDeviceMemoryStatus 检索设备的内存使用信息。
GetDeviceSystemFolderPath 检索到设备系统文件夹的路径。
GetDeviceSystemInfo 检索设备的系统详细信息。
GetDeviceSystemPowerStatus 检索设备的电源状态。
GetDeviceVersion 检索设备的操作系统版本。
MoveDeviceFile 将现有设备文件移到或重命名到一个新位置。
RemoveDeviceDirectory 删除设备中的目录。
SetDeviceFileAttributes 设置设备中文件的属性。
SetDeviceFileTime 设置设备中文件的日期时间。
上面的方法看上去多,其实常用的就那几个:
核心代码主要有:
private OpenNETCF.Desktop.Communication.RAPI rApi;

rApi=new rApi();

if(rApi.DevicePresent)   //表明当前ActiveSync是否有设备.
{
    rApi.Connect();      //开始连接设备;
    rApi.CopyFileFromDevice("d:\\ScanData.txt", "\\Application\\ScanData.txt", true);
                         //从设备复制文件到D:盘 ,true 表示重写,false 不重写,
}

下面介绍使用案例,方便大家一起学习:

 //pc->pda
public static bool DataToTermial(string LocalFile, string RemoteFile)
        {
            RAPI rapi = new RAPI();
            try
            {
               
                rapi.Connect(true, 100);
                if (!rapi.Connected)
                    return false;
                if (rapi.DeviceFileExists(RemoteFile))
                {
                    DialogResult dr;
                    dr = MessageBox.Show("文件已存在,是否覆盖?", "提示:", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                    if (dr == DialogResult.Yes)
                        rapi.DeleteDeviceFile(RemoteFile);
                    else
                        return false;
                }
                rapi.CopyFileToDevice(LocalFile, RemoteFile, true);
                rapi.Disconnect();
                return true;

            }
            catch (RAPIException es)
            {
                MessageBox.Show(es.Message);
                return false;
            }

        }
//pda->pc
        public static bool DataFromTerminal(string LocalFile, string RemoteFile)
        {
            RAPI rapi = new RAPI();
            try
            {
                
                rapi.Connect(true);
                if (!rapi.Connected)
                {
                    return false;
                }

                if (rapi.DeviceFileExists(LocalFile))
                {
                    rapi.CopyFileFromDevice(RemoteFile, LocalFile, true);
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }

有错的话,欢迎大家指正,转载请指明出处。

posted @ 2011-08-04 23:25 Alvin_jstu 阅读(389) 评论(0) 编辑

 

[DllImport(kernel32.dll)]

引入kernel32.dll这个动态链接库,在这个动态链接库中包含了很多的windows api 函数,在windows api 对ini文件读写的方法经常被用到,下面摘录了别人的一段较详细的资料

namespace APIMethod
{

    /// <summary>
    /// Ini文件操作类
    /// </summary>
    public sealed class IniUtility
    {
        private static string _filePath = string.Empty;//文件路径

        /// <summary>
        /// 文件路径
        /// </summary>
        public static string FilePath
        {
            get { return _filePath; }
            set { _filePath = value; }
        }

        /// <summary>
        /// Windows API 对INI文件写方法
        /// </summary>
        /// <param name="lpApplicationName">要在其中写入新字串的小节名称。这个字串不区分大小写</param>
        /// <param name="lpKeyName">要设置的项名或条目名。这个字串不区分大小写。用null可删除这个小节的所有设置项</param>
        /// <param name="lpString">指定为这个项写入的字串值。用null表示删除这个项现有的字串</param>
        /// <param name="lpFileName">初始化文件的名字。如果没有指定完整路径名,则windows会在windows目录查找文件。如果文件没有找到,则函数会创建它</param>
        /// <returns></returns>
        [System.Runtime.InteropServices.DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string lpApplicationName, string lpKeyName, string lpString, string lpFileName);

        /// <summary>
        /// Windows API 对INI文件读方法
        /// </summary>
        /// <param name="lpApplicationName">欲在其中查找条目的小节名称。这个字串不区分大小写。如设为null,就在lpReturnedString缓冲区内装载这个ini文件所有小节的列表</param>
        /// <param name="lpKeyName">欲获取的项名或条目名。这个字串不区分大小写。如设为null,就在lpReturnedString缓冲区内装载指定小节所有项的列表</param>
        /// <param name="lpDefault">指定的条目没有找到时返回的默认值。可设为空("")</param>
        /// <param name="lpReturnedString">指定一个字串缓冲区,长度至少为nSize</param>
        /// <param name="nSize">指定装载到lpReturnedString缓冲区的最大字符数量</param>
        /// <param name="lpFileName">初始化文件的名字。如没有指定一个完整路径名,windows就在Windows目录中查找文件</param>
        /// 注意:如lpKeyName参数为null,那么lpReturnedString缓冲区会载入指定小节所有设置项的一个列表。
        /// 每个项都用一个NULL字符分隔,最后一个项用两个NULL字符中止。也请参考GetPrivateProfileInt函数的注解
        /// <returns></returns>
        [System.Runtime.InteropServices.DllImport("kernel32")]
        private static extern long GetPrivateProfileString(string lpApplicationName, string lpKeyName, string lpDefault, System.Text.StringBuilder lpReturnedString, int nSize, string lpFileName);

        /// <summary>
        /// 向Ini文件中写入值
        /// </summary>
        /// <param name="section">小节的名称</param>
        /// <param name="key">键的名称</param>
        /// <param name="value">键的值</param>
        /// <returns>执行成功为True,失败为False。</returns>
        public static long WriteIniKey(string section, string key, string value)
        {
            if (section.Trim().Length <= 0 || key.Trim().Length <= 0 ||
                value.Trim().Length <= 0) return 0;

            return WritePrivateProfileString(section, key, value, FilePath);
        }

        /// <summary>
        /// 删除指定小节中的键
        /// </summary>
        /// <param name="section">小节的名称</param>
        /// <param name="key">键的名称</param>
        /// <returns>执行成功为True,失败为False。</returns>
        public static long DeleteIniKey(string section, string key)
        {
            if (section.Trim().Length <= 0 || key.Trim().Length <= 0) return 0;

            return WritePrivateProfileString(section, key, null, FilePath);
        }

        /// <summary>
        /// 删除指定的小节(包括这个小节中所有的键)
        /// </summary>
        /// <param name="section">小节的名称</param>
        /// <returns>执行成功为True,失败为False。</returns>
        public static long DeleteIniSection(string section)
        {
            if (section.Trim().Length <= 0) return 0;

            return WritePrivateProfileString(section, null, null, FilePath);
        }

        /// <summary>
        /// 获得指定小节中键的值
        /// </summary>
        /// <param name="section">小节的名称</param>
        /// <param name="key">键的名称</param>
        /// <param name="defaultValue">如果键值为空,或没找到,返回指定的默认值。</param>
        /// <param name="capacity">缓冲区初始化大小。</param>
        /// <returns>键的值</returns>
        public static string GetIniKeyValue(string section, string key,string defaultValue,int capacity)
        {
            if (section.Trim().Length <= 0 || key.Trim().Length <= 0) return defaultValue;

            System.Text.StringBuilder strTemp = new System.Text.StringBuilder(capacity);
            long returnValue = GetPrivateProfileString(section, key, defaultValue, strTemp, capacity, FilePath);

            return strTemp.ToString().Trim();
        }

        /// <summary>
        /// 获得指定小节中键的值
        /// </summary>
        /// <param name="section">小节的名称</param>
        /// <param name="key">键的名称</param>
        /// <param name="defaultValue">如果键值为空,或没找到,返回指定的默认值。</param>
        /// <returns>键的值</returns>
        public static string GetIniKeyValue(string section, string key, string defaultValue)
        {
            return GetIniKeyValue(section, key, defaultValue, 1024);
        }

        /// <summary>
        /// 获得指定小节中键的值
        /// </summary>
        /// <param name="section">小节的名称</param>
        /// <param name="key">键的名称</param>
        /// <returns>键的值</returns>
        public static string GetIniKeyValue(string section, string key)
        {
            return GetIniKeyValue(section, key, string.Empty, 1024);
        }
    }
}

源地址:http://kb.cnblogs.com/a/1209300/

posted @ 2011-04-28 09:43 Alvin_jstu 阅读(319) 评论(0) 编辑
摘要: 首先感谢一下原作者,太感谢了------------------------------------------------------------------------如果使用SharePoint 2007作为文档管理平台,它很让人诟病的一点就是,SharePoint 2007将文件本身直接存储在SQL Server数据库之中。虽然Windows SharePoint Services 3.0 SP1增加了一个External BLOB Storage(EBS)接口,但是微软并没有提供实现,而是需要开发人员自己来实现它。 SharePoint 2010仍然对EBS提供兼容,但并不推荐使用E阅读全文
posted @ 2010-12-21 20:47 Alvin_jstu 阅读(83) 评论(0) 编辑
摘要: Microsoft Office SharePoint Service 2007 是微软最新的企业协作应用和开发平台。简称MOSS,MOSS基于Window SharePonit Service 3.0开发,简称WSS。MOSS是收费的,WSS是免费的,只要拥有了Window Server2003的许可,就可以免费安装WSS。WSS拥有站点,列表,文档库,文档管理,web part,集群部署,站点内搜索,基于WF的工作流等功能。MOSS扩展实现了增强的文档管理,企业搜索,扩展了工作流,引入了web内容管理,Form Service , Excel Service,个人站点等。 以下章节若没有特阅读全文
posted @ 2010-12-20 16:07 Alvin_jstu 阅读(525) 评论(0) 编辑
摘要: /*/*数据库总结:--查询,是操作中的重点及精华部分,由于业务的多样性,导致查询方案的多样性,但是已有的关系必须通过各种手段在查询中予以表达--常见查询手段/*1.普通查询 select 结果集列表表达式 from 值域范围 where 结果集筛选表达式 group by 统计结果集分组条件表达式 order by 结果集排序条件表达式2.子查询(在查询内部嵌套其它辅助查询的定义,例如:其它查询...阅读全文
posted @ 2010-11-25 19:47 Alvin_jstu 阅读(186) 评论(0) 编辑
摘要: 1.什么叫做类同一个事物的相同属性和行为的抽象,简单的说就是对象的模板。2.什么叫做对象如果说类是一种抽象,那么对象就是对类的一种具体实现。3.什么叫做封装对某些相关联的事物进行组合包装,就像类一样。4.什么叫多态子类的实例指向父类的引用。如何实现多态呢?通过继承,抽象类与接口就是它的表现形式。5.什么是抽象类(abstract)将几个有区别的事物的共同性质和特性形象的去出来或孤立的进行考虑的行为...阅读全文
posted @ 2010-11-12 19:32 Alvin_jstu 阅读(149) 评论(0) 编辑
摘要: 在早期的互联网中,由于HTTP协议时无状态的,所谓无状态是指在不同的请求,不同的操作时相互独立的,不存在任何的关系,HTTP不会为你存储任何的请求信息。虽然可以通过隐藏域来实现,但是非常的麻烦,而且它只仅限于同一张网页。互联网的先驱Netscape(网景)为HTTP协议增加了一个简单又非常有用的特征--小甜饼(cookie)。那什么是cookie呢?当客户端向服务端发送请求后,服务端对客户端发送过...阅读全文
posted @ 2010-11-10 18:35 Alvin_jstu 阅读(322) 评论(2) 编辑
仅列出标题  下一页