没事,看看sql,

BULK   INSERT 

CREATE TABLE [dbo].[course](
 [id] [int] NULL,
 [name] [nvarchar](50) NULL,
 [CourseType] [nvarchar](50) NULL,
 [Course] [float] NULL
)

  导入数据:

将下面的数据存储为文本文件或SQL文件

2,李刚,语文,89;3,李刚,数学,79;3,李刚,英语,69;4,李刚,化学,89

导入语句:

BULK   INSERT    dbo.course
      FROM   'd:\course.txt ' 
      WITH   
            ( 
                  FIELDTERMINATOR   =   ','
                  ROWTERMINATOR   =   ';' 
            )
posted @ 2011-12-26 14:04 ant520 阅读(6) 评论(0) 编辑
在配置静态路由时,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口。在点对点的网络中,两者可能没有什么差别,但在以太网中,两者有很大差别。
        在以太网中,两个相邻接口之间的通信是依靠MAC地址。相邻接口通信时,需要知道对方的MAC地址,根据MAC地址,将通信数据转换成数据帧后交付给网络,进而到对方。而对方MAC地址的获得,是通过第二层数据帧广播,由ARP协议完成的。
        当静态路由中使用出站接口做为下一跳时,路由器会认为目标网络和接口处在直连网络中。看下图的拓扑:
        在路由器R1中的静态路由为 ip route 192.168.2.0 255.255.255.0 fastethernet0/1 时,R1就认为192.168.2.0/24网络和自己直连。可以在R1中使用 show ip route 命令看出,如下图示:
 
        在以太网中,直连网络中主机间的通信是通过ARP协议广播来获取到要交付的目标主机的MAC地址的。也就是说,当R1左侧网络中的PC1要和R2右侧网络的PC2PC3通信时,数据传递到R1时,R1看到目标网络是自己的直连网络(由于静态路由中指定下一跳为自身接口所致),于是R1就要在F0/1所处网络发出ARP请求广播,来寻找192.168.2.11/12对应的MAC地址。
        这时,如果R2启用了ARP代理,那么R2将代替PC2PC3应答此ARP请求,也就是说返回给R1192.168.2.1112对应的MAC地址是R2F0/1接口MAC。这样,R1中将产生两条ARP缓存记录,分别为:
        192.168.2.11 R2F0/1MAC
        192.168.2.12 R2F0/1MAC
PC1上分别PING 192.168.1112,然后在R1上使用show arp命令查看到的结果如下图示:
c803.0f8c.0001正是R2F0/1接口的MAC
        R2中没有启用ARP代理时,PC1PC2PC3将不能正常通信。
        从上述实验中我们知道,当R1中使用F0/1接口做为到达目标网络192.168.2.0/24的下一跳时,R1左侧网络中的PC,如果要和R2右侧的192.168.2.0/24网络中的所有PC通信,那么在R1上均会产生ARP缓存记录。可以想象:当双方通信的PC很多时,R1中势必会产生大量的ARP缓存,从而可能会导致R1的内存被耗尽。
        如果R1中到192.168.2.0/24网络的静态路由设置为 ip route 192.168.2.0 255.255.255.0 10.0.0.2,这样的话,R1中到192.168.2.0/24网络的数据包,都只会交付给10.0.0.2R1通过ARP协议来获取10.0.0.2对应的MAC地址,然后将数据包以第二层数据帧方式交付出去。也就是说,R1上只会保留一条ARP缓存信息,即:10.0.0.2    R2F0/1MAC。这样可以避免R1中产生大量ARP缓存而导致内存耗尽。
 
 
 
 
 
 
总结:在配置静态路由时,既可指定发送接口,也可指定下一跳地址,到底采用哪种方法,需要根据实际情况而定:对于支持网络地址到链路层地址解析的接口(直接连到主机)或点到点接口(ppp),指定发送接口即可;对于nbma接口,如以太网接口、VLAN接口、封装x.25或帧中继的接口、拨号口等,支持点到多点,这时除了配置ip路由外,还需在链路层建立二次路由,即ip地址到链路层地址的映射(如dialer map ip、x.25 map ip或frame-relay map ip等),这种情况配置静态路由不能指定发送接口,应配置下一跳ip地址。
 
如果在点到点网络环境下,无论是指定下一跳地址还是出接口,其效果都是一样的。但是在广播网络环境下,指定下一跳地址和指定出接口将会达到不同的效果。如果指定为出接口的话,那么不管数据包的目标地址是否有效,每次当数据包到达时都会触发一个ARP请求和相应,又因为ARP代理功能在IOS环境下默认是打开的,这就意味着路由器需要配备大量的ARP高速缓存。而如果是指定为下一跳地址的话,仅当第一个去往目标网络的数据包到达时,才会触发ARP请求。
    所以为了便于路由的查找和减少ARP缓存条目过多的办法就是同时指定出接口和下一跳地址。这样做的话,路由条目在路由表中表现为非直连网络,其管理距离值为1。
    EX:ip route 目标网络 掩码 接口 下一跳地址
posted @ 2011-09-27 11:49 ant520 阅读(61) 评论(0) 编辑

如何理解冲突域和广播域?

冲突域:【定义】在同一个冲突域中的每一个节点都能收到所有被发送的帧。简单的说就是同一时间内只能有一台设备发送信息的范围。
【分层】基于OSI的第一层(数据链路层)
【设备】第二层设备能隔离冲突域,比如Switch。交换机能缩小冲突域的范围,交换接的每一个端口就是一个冲突域。

广播域:【定义】网络中能接收任一设备发出的广播帧的所有设备的集合。简单的说如果站点发出一个广播信号,所有能接收收到这个信号的设备范围称为一个广播域。
  【分层】基于OSI的第二层(物理层)
【设备】第三层设备才能隔离广播域,比如Router。路由器能隔离广播域,其每一个端口就是一个广播域。


下面通过三个例子来说明:
例子一,一个Switch直连三台PC和一台hub,而hub下直连有2台PC。

图中已经给出了答案,可是,这个4个冲突域1个广播域是怎么算出来呢?
根据前面介绍的关于广播域的定义中我们知道 ,只有第三层设备才能隔离广播域。上图中并没有router等第三层设备,所以,这里的广播域没有被隔离。
也就是说上图中的网络只有一个广播域。
冲突域的计算,前面有说Switch能缩小冲突域,一个Switch端口其实就是一个冲突域,上图中有3台pc和1台hub直连到Switch上,所以,这里的冲突域为4个。


第一个例子比较简单,下面我们在网络中有router第三层设备的例子
一台router下直一台Switch和一台hub,Switch和hub下都各自连有三台pc:

第三层设备router能隔离广播域,上图中router的三个端口分别直连了三个hub,因此得出有三个广播域。
但是,那3个冲突域是怎么来的呢?
其实,router他不但能隔离广播域,默认也是可以缩小冲突域的。所以上图中的router用3个端口将网络既分开成了3个广播域,又缩小成了3个冲突域。

第二个例子给了我们一个提醒,那就是路由器默认也是可以隔离冲突域的。
好了,下面我再看最后一个例子,这里都用上了常用的网络设备hub、Switch和router。
一台router下连两台交换机和一台hub,两台交换机下分辨连有三台 PC,而hub下连有4台PC:

上图所示网络,算出3个广播域不难,因为router有3个端口直连了2台交换机和1台集线器嘛。
可是,冲突域不是7个吗?怎么是9个呢?两台交换机共使用了6个端口,外加路由器下还直连了一个集线器,这也是一个冲突域。
于是,我可以得出6+1=7,7个冲突域啊。究竟是哪里算少了?

对了,就是路由器到两台交换机之间也还是存在冲突域的。这一点也特别需要注意。

最后记录一下例子中提到的需要注意的地方了:
1、第二层设备只能隔离冲突域,第三层设备才能隔离广播域;
2、路由器不但能隔离广播域,默认也是可以隔离冲突域的;
3、路由器下直连交换,则路由器到交换机之间也是存在冲突域的

 

http://blog.csdn.net/zuike/article/details/5618374

posted @ 2011-09-05 17:49 ant520 阅读(86) 评论(0) 编辑
摘要: 文件上传(File upload) Ajax File Upload.jQUploader.Multiple File Upload plugin.jQuery File Style.Styling an input type file.Progress Bar Plugin.表单验证(Form Validation)jQuery Validation.Auto Help.Simple jQuery form validation.jQuery XAV - form validations.jQuery AlphaNumeric.Masked Input.TypeWatch Plugin.Te阅读全文
posted @ 2011-05-26 14:53 ant520 阅读(46) 评论(0) 编辑
SQLite是一个开源、免费的小型的Embeddable RDBMS(关系型数据库),用C实现,内存占用较小,支持绝大数的SQL92标准,现在已变得越来越流行,它的体积很小,被广泛应用于各种不同类型的应用中。SQLite已经是世界上布署得最广泛的SQL数据库引擎,被用在无以计数的桌面电脑应用中,还有消费电子设备中,如移动电话、掌上电脑和MP3播放器等。

SQLite 的关键字列表, 支持的sql语法 

 

System.Data.SQLite http://sqlite.phxsoftware.com/ 是Sqlite在.NET下的最新实现。

简单介绍如下:

System.Data.SQLite 是一个原始SQLite的加强版.  它将是一个原版的sqlite3.dll完全替代品 (你甚至就可以把它重命名为sqlite3.dll).  它不需要链接.NET 运行时,所以可以脱离.NET独立发布, 然而它内嵌了一个完整的 ADO.NET 2.0 引擎,为开发提供了完整的支持.

特性简介:

完整的 ADO.NET 2.0 实现
整个工程完全基于VS2005 和 ADO.NET 2.0全新构建, 使用了全部的ADO.NET framework新特性.  包括完整的 DbProviderFactory 支持, 自动的分布式事务调用, 广泛的模式支持, 此外所有的类都是从 ADO.NET 2.0 的基类继承下来的.

支持完整和精简的 .NET Framework 以及 C/C++
这个库不需要链接依赖.NET运行时,100%兼容原始的sqlite3.dll,可以使用非托管的C/C++ 进行开发. 

可移植的数据库文件
未加密的 SQLite 数据库文件可以自由的跨平台和处理器使用,包括非Windows平台. 加密之后的数据库可以在全部Windows平台上使用. 

可以信赖的速度,比包括Sql Server Mobile 在内的其它大多数嵌入式数据库都要快速
SQLite'安装所占用的空间相对于Sql Mobile可谓忽略不计了. 它在运行的时候占用更少的内存,同时生成的数据库也更小.

数据库加密
可以对整个数据库文件进行加密.  支持二进制和明文的密码.

支持使用Visual Studio 2005 设计
你可以向Server Explorer添加一个SQLite 连接, 使用查询设计器创建处查询语句, 向一个数据集中拖拽一个表格等等! SQLite的开发者可以在包括体验版在内的各种Visual Studio 2005下工作.

单文件再发布包容量在400kb以下
将SQLite本身和ADO.NET 封装捆绑编译在一起.  预编译的二进制文件提供了 x86, IA64, x64 和ARM 的版本.

广泛的SQL语言支持
SQLite 支持大部分的SQL92 标准(see below).  支持命名和未命名的参数以 UTF-8 和UTF-16 编码通过优化的管道传入SQLite 内核.

用户自定义的函数 和 排序
全面支持用户自定义函数和排序方式,意味着你可以用自己喜欢的.NET语言来实现SQLite没有提供的特性.  这一切将非常的简单.

提供了全部的源代码.  100% 免费.
全部的封装库源代码都是公有的.  无论是个人还是商业应用都没有任何的协议约束.

下载地址:http://sourceforge.net/projects/sqlite-dotnet2/files/

下载后安装,在安装路径下找到 System.Data.SQLite.DLL,复制到项目中,添加引用,就可以直接使用了。

SQLite GUI工具很多,SQLite GUI客户端列表 http://www.sqlite.org/cvstrac/wiki?p=ManagementTools   

我使用的“SQLite Administrator” 下载地址:http://download.orbmu2k.de/files/sqliteadmin.zip

下载不用安装就可使用,图形化界面,操作起来简单方便。



 

在网上搜索到一个 SQLite Helper类基于.net c#的SQLite数据库操作类 

代码如下:

 

代码 
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Web;
  5 using System.Configuration;
  6 using System.Data;
  7 using System.Data.SQLite;
  8 namespace DAL
  9 
 10 {
 11     public class Sqlite
 12 
 13     {
 14         /// <summary>
 15         /// 获得连接对象
 16         /// </summary>
 17         /// <returns></returns>
 18         public static SQLiteConnection GetSQLiteConnection()
 19         {
 20             return new SQLiteConnection("Data Source=" + System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["db"].ToString()));
 21         }
 22 
 23         private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p)
 24         {
 25             if (conn.State != ConnectionState.Open)
 26                 conn.Open();
 27             cmd.Parameters.Clear();
 28             cmd.Connection = conn;
 29             cmd.CommandText = cmdText;
 30             cmd.CommandType = CommandType.Text;
 31             cmd.CommandTimeout = 30;
 32             if (p != null)
 33 
 34             {
 35                 foreach (object parm in p)
 36                     cmd.Parameters.AddWithValue(string.Empty, parm);
 37                 //for (int i = 0; i < p.Length; i++)
 38                 //    cmd.Parameters[i].Value = p[i];
 39             }
 40         }
 41         public static DataSet ExecuteDataset(string cmdText, params object[] p)
 42         {
 43             DataSet ds = new DataSet();
 44             SQLiteCommand command = new SQLiteCommand();
 45             using (SQLiteConnection connection = GetSQLiteConnection())
 46             {
 47                 PrepareCommand(command, connection, cmdText, p);
 48                 SQLiteDataAdapter da = new SQLiteDataAdapter(command);
 49                 da.Fill(ds);
 50             }
 51             return ds;
 52         }
 53         public static DataRow ExecuteDataRow(string cmdText, params object[] p)
 54         {
 55             DataSet ds = ExecuteDataset(cmdText, p);
 56             if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
 57                 return ds.Tables[0].Rows[0];
 58             return null;
 59         }
 60         /// <summary>
 61         /// 返回受影响的行数
 62         /// </summary>
 63         /// <param name="cmdText">a</param>
 64         /// <param name="commandParameters">传入的参数</param>
 65         /// <returns></returns>
 66         public static int ExecuteNonQuery(string cmdText, params object[] p)
 67         {
 68             SQLiteCommand command = new SQLiteCommand();
 69             using (SQLiteConnection connection = GetSQLiteConnection())
 70             {
 71                 PrepareCommand(command, connection, cmdText, p);
 72                 return command.ExecuteNonQuery();
 73             }
 74         }
 75         /// <summary>
 76         /// 返回SqlDataReader对象
 77         /// </summary>
 78         /// <param name="cmdText"></param>
 79         /// <param name="commandParameters">传入的参数</param>
 80         /// <returns></returns>
 81         public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p)
 82         {
 83             SQLiteCommand command = new SQLiteCommand();
 84             SQLiteConnection connection = GetSQLiteConnection();
 85             try
 86             {
 87                 PrepareCommand(command, connection, cmdText, p);
 88                 SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
 89                 return reader;
 90             }
 91             catch
 92             {
 93                 connection.Close();
 94                 throw;
 95             }
 96         }
 97         /// <summary>
 98         /// 返回结果集中的第一行第一列,忽略其他行或列
 99         /// </summary>
100         /// <param name="cmdText"></param>
101         /// <param name="commandParameters">传入的参数</param>
102         /// <returns></returns>
103         public static object ExecuteScalar(string cmdText, params object[] p)
104         {
105             SQLiteCommand cmd = new SQLiteCommand();
106             using (SQLiteConnection connection = GetSQLiteConnection())
107             {
108                 PrepareCommand(cmd, connection, cmdText, p);
109                 return cmd.ExecuteScalar();
110             }
111         }
112         /// <summary>
113         /// 分页
114         /// </summary>
115         /// <param name="recordCount"></param>
116         /// <param name="pageIndex"></param>
117         /// <param name="pageSize"></param>
118         /// <param name="cmdText"></param>
119         /// <param name="countText"></param>
120         /// <param name="p"></param>
121         /// <returns></returns>
122         public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params object[] p)
123         {
124             if (recordCount < 0)
125                 recordCount = int.Parse(ExecuteScalar(countText, p).ToString());
126             DataSet ds = new DataSet();
127             SQLiteCommand command = new SQLiteCommand();
128             using (SQLiteConnection connection = GetSQLiteConnection())
129             {
130                 PrepareCommand(command, connection, cmdText, p);
131                 SQLiteDataAdapter da = new SQLiteDataAdapter(command);
132                 da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");
133             }
134             return ds;
135         }
136     }
137 }
 

 

在VS中使用System.Data.SQLite实现增删改查功能,网上有很多相关实例:

 

 

代码 
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Web;
  4 using System.Web.UI;
  5 using System.Web.UI.WebControls;
  6 using System.Data.SQLite;
  7 
  8 namespace Demo
  9 {
 10     public partial class TestSqlLite : System.Web.UI.Page
 11     {
 12         protected void Page_Load(object sender, EventArgs e)
 13         {
 14 
 15         }
 16 
 17         protected void btnTest_Click(object sender, EventArgs e)
 18         {
 19             SQLiteConnection.ClearAllPools();
 20             SQLiteConnection.CreateFile(Server.MapPath("~") + "/UserData.dbx");
 21             SQLiteConnection conn = new SQLiteConnection("Data Source=" + Server.MapPath("~" + "/UserData.dbx"));
 22             conn.Open();
 23             Response.Write("打开数据库成功~~<br />");
 24 
 25             SQLiteCommand cmd = new SQLiteCommand();
 26             cmd.CommandText = "create table Users (UserID int primary key,UserName varchar(100) not null,UserPassword varchar(100) not null)";
 27             cmd.Connection = conn;
 28             cmd.ExecuteNonQuery();
 29 
 30             for (int i = 0; i < 100; i++)
 31             {
 32                 cmd.CommandText = "insert into Users (UserID,UserName,UserPassword) values (" + i + ",'TestUser_" + i + "','" + DateTime.Now.ToString().Replace(" ", "-").Replace(":", "-") + "')";
 33                 cmd.ExecuteNonQuery();
 34             }
 35 
 36             Response.Write("插入成功~~<br />");
 37 
 38             cmd.CommandText = "select Username from Users where UserID=1";
 39             cmd.Connection = conn;
 40             string tempUserName = cmd.ExecuteScalar().ToString();
 41 
 42             Response.Write("单个值查询结果为:" + tempUserName + "<br /><br />");
 43 
 44 
 45             cmd.CommandText = "select * from Users ";
 46             cmd.Connection = conn;
 47             SQLiteDataReader sdrInfo = cmd.ExecuteReader();
 48             if (sdrInfo != null)
 49             {
 50                 int userID = 0;
 51                 string userName = string.Empty;
 52                 string userPassword = string.Empty;
 53                 while (sdrInfo.Read())
 54                 {
 55                     userID = Convert.ToInt32(sdrInfo["UserID"]);
 56                     userName = sdrInfo["UserName"].ToString();
 57                     userPassword = sdrInfo["UserPassword"].ToString();
 58 
 59                     Response.Write("UserID:" + userID + "<br />");
 60                     Response.Write("UserName:" + userName + "<br />");
 61                     Response.Write("UserPassword:" + userPassword + "<br />");
 62                     Response.Write("<br />");
 63                 }
 64                 sdrInfo.Close();
 65                 sdrInfo.Dispose();
 66             }
 67 
 68             cmd.CommandText = "update Users set UserPassword='linxiang'";
 69             cmd.Connection = conn;
 70             cmd.ExecuteNonQuery();
 71             Response.Write("更新数据库中的数据成功.");
 72 
 73             Response.Write("以下结果为查询从数据库中经过编辑过后的数据项<br /><br />");
 74             cmd.CommandText = "select * from Users ";
 75             cmd.Connection = conn;
 76             sdrInfo = cmd.ExecuteReader();
 77             if (sdrInfo != null)
 78             {
 79                 int userID = 0;
 80                 string userName = string.Empty;
 81                 string userPassword = string.Empty;
 82                 while (sdrInfo.Read())
 83                 {
 84                     userID = Convert.ToInt32(sdrInfo["UserID"]);
 85                     userName = sdrInfo["UserName"].ToString();
 86                     userPassword = sdrInfo["UserPassword"].ToString();
 87 
 88                     Response.Write("UserID:" + userID + "<br />");
 89                     Response.Write("UserName:" + userName + "<br />");
 90                     Response.Write("UserPassword:" + userPassword + "<br />");
 91                     Response.Write("<br />");
 92                 }
 93                 sdrInfo.Close();
 94                 sdrInfo.Dispose();
 95             }
 96 
 97             conn.Clone();
 98             conn.Dispose();
 99         }
100     }
101 }


转:http://archive.cnblogs.com/a/1788268/
posted @ 2011-04-15 17:31 ant520 阅读(542) 评论(0) 编辑
摘要: http://studiostyles.info/是一个提供Visual studio 配置文件的网站,提供很多配置文件,可以对编辑器的字体样式进行个性化定制。阅读全文
posted @ 2011-04-07 16:10 ant520 阅读(62) 评论(0) 编辑
摘要: 1.安装SQL Server 2000出现“以前进行的程序安装创建了挂起的文件操作”的解决办法: a、在开始->运行中输入regedit b、到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 位置 c、在右边窗口右击PendingFileRenameOperations,选择删除,然后确认 2.SQL Server 2000卸载后不能重新安装: a.删除注册表如下两个键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer HKEY_CURRENT_USE阅读全文
posted @ 2011-04-07 15:59 ant520 阅读(16) 评论(0) 编辑
摘要: public class Program { delegate void CallFunction(object para);//定义委托[和定义方法一个样,简单理解为static 换成了delegate] private static event CallFunction CallEvenHandle;//定义事件[简单理解,有事件必有委托] static void Main(string[] args) { //调用委托,之前定义像方法,这里new了一个实例,和js的new一个function 差不多 CallFunction cf = new CallFunction(WritePara阅读全文
posted @ 2011-04-07 15:23 ant520 阅读(9) 评论(0) 编辑
摘要: word里面:1.按下“Ctrl+F9”快捷键,产生一个空域符号(一对大括号)2.将鼠标定位于大括号内,然后输入如下代码“EQ\o(口,√)”,注意括号中的“,”是英文标点。3用鼠标分别选中口和√对它们的大小、位置、字符间距等分别进行设置使这两个字符的相对大小、相对位置合适,完成后用鼠标全部选择,按下“Shift+F9”快捷键。阅读全文
posted @ 2011-03-10 16:20 ant520 阅读(125) 评论(0) 编辑
摘要: public string ConvertDataTableToXML(DataTable xmlDS) { MemoryStream stream = null; XmlTextWriter writer = null; try { stream = new MemoryStream(); writer = new XmlTextWriter(stream, Encoding.Default); xmlDS.WriteXml(writer); int count = (int)stream.Length; byte[] arr = new byte[count]; stream.Seek(0阅读全文
posted @ 2011-03-08 16:57 ant520 阅读(49) 评论(0) 编辑