SoilNET's Blogger

关于SoilNET个人的博客网站

导航

<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

公告

最新随笔

相册浏览

统计

文章分类

档案

随笔分类

相册

多媒体

相关链接

登录

2006年11月23日 #

UrlReWriter 使用经验小结

UrlReWriter 使用经验小结

 UrlRewriter 是微软封装好了的一个URL重写组件。使用它可以让我节约很多自已开发的时间。

好了,开始讲述我的应用经验,这只是很菜鸟的经验,高手就不用看了。

第一步,请从此下载此组件。解压,把UrlRewriter.dll copy到你的项目 bin 目录下。

第二步,在Web.config中加入:

<?xml version="1.0" encoding="gb2312" ?>
<configuration>
     <configSections>
          <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
     </configSections>

第二步,加入重写的规则节点:
如:  
   <RewriterConfig>
          <Rules>
              <RewriterRule>
                   <LookFor>~/Sell/(.[0-9]*)\.html</LookFor>
                   <SendTo>~/Search/Search_Sell.aspx?id=$1</SendTo>
              </RewriterRule>
              <RewriterRule>
                   <LookFor>~/Sell/Search_Sell\.aspx</LookFor>
                   <SendTo>~/Search/Search_Sell.aspx</SendTo>
              </RewriterRule>
              <RewriterRule>
       <LookFor>~/Buy/(.[0-9]*)\.html</LookFor>
                   <SendTo>~/Search/Search_Buy.aspx?id=$1</SendTo>
              </RewriterRule>
              <RewriterRule>
       <LookFor>~/Buys/(.[0-9]*)\.html</LookFor>
                   <SendTo>~/Buys/Show.aspx?id=$1</SendTo>
              </RewriterRule>
          </Rules>
     </RewriterConfig>

这个就要根据你的需要了,如果你对正则表达式不熟,那么没办法,要么凭借你的高智商去找其中规律,稍稍改一下就能为你所用了。呵呵。如果实在搞不清,那就自己GOOGLE一下正则表达式吧。(本人开始是参考别人的配置猜的,竟然用对了,呵呵。后来还是看了一下相关资料,发现这东东很有用。)

第三步,加入模块配置(写在<system.web>里面):
如: 
 <httpHandlers>
     <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
  </httpHandlers>
(这里表示使用HTTP程序来处理重写)

好了,到了现在我们可以试一下看。

于是输入:http://127.0.0.1:8080/Sell/1.aspx 出现了,呵呵。但是如果所它改为:http://127.0.0.1:8080/Sell/1.html
晕,发现不行。汗。。。
呵呵,原因是没把HTML的解析用 asp.net  的ISAPI来解析。
办法是。。。

第四步,在IIS\你的站点\属性\主目录\配置\映谢 加入一个和 aspx 页面的配置相同的扩展名项。注意“确认文件是否存在”不要勾选,否则会出现找不到文件。

现在再来试试看。什么?#¥%#¥%#,还是不行。呵呵。不要急,咱们回过头再来看看,原来在 web.config 中我们没有配置 .html 也使用模块此解析。

第五步,在模块配置中加入:
  <httpHandlers>
     <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
     <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
  </httpHandlers>

现在总可以了吧,呵呵。终于看到了,兴奋吧。不要急,这还只是最简单的。如果你的页面有回传。比如说放了DATAGRID,有分页的,你点到下一页就发现,晕倒,又出问题了。
这下怎么办呢,这个其实微软件的网站上就有说到,我在这里简述一下了。


第六步,加入窗体回传保持的组件:
在原来你下载的项目里找到 ActionlessForm.dll 放到你的项目 bin 目录下。

然后在你的这个页面中加入:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
再把你的<Form...>改为:
<skm:Form id="你的表单名" method="post" runat="server">
.....
</skm:Form>

That's All.现在你可以高枕无忧了。一切如你所愿。

最后,恭祝各位一切顺利。

11:16 | 评论 (4)

.Net平台下开发中文语音应用程序

.Net平台下开发中文语音应用程序

摘要:
语音是人类最自然的交互方式,也是现阶段软件用户界面发展的最高目标。微软公司一直积极推动语音技术的发展,并且公布了语音开发平台Speech SDK帮助开发人员实现语音应用。
随着.net技术深入人心,越来越多的程序员开始转到.net平台上进行开发。然而,在新发布的.net speech SDK里面并没有对中文语音进行支持,目前支持中文的Speech SDK最高版本为Windows平台下的SAPI 5.1(),本文介绍如何在.net平台下利用SAPI5.1开发中文语音应用程序。

目录:
1. SAPI.51 SDK浅析以及安装
2. 导入COM对象到.Net
3. 用C#开发中文TTS应用程序示例
4. 结论
5. 参考文献

1. SAPI.51 SDK浅析以及安装
SAPI SDK是微软公司免费提供的语音应用开发工具包,这个SDK中包含了语音应用设计接口(SAPI)、微软的连续语音识别引擎(MCSR)以及微软的语音合成(TTS)引擎等等。目前的5.1版本一共可以支持3种语言的识别 (英语,汉语和日语)以及2种语言的合成(英语和汉语)。SAPI中还包括对于低层控制和高度适应性的直接语音管理、训练向导、事件、语法编译、资源、语音识别(SR)管理以及TTS管理等强大的设计接口。其结构如图(1):

图(1)
语音引擎则通过DDI层(设备驱动接口)和SAPI(SpeechAPI)进行交互,应用程序通过API层和SAPI通信。通过使用这些API,用户可以快速开发在语音识别或语音合成方面应用程序。
SAPI5.1 SDK可以从微软网站下载:http://www.microsoft.com/speech/download/sdk51/ 需要安装程序的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)。

2. 导入COM对象到.Net
SAPI5.1的基于Windows平台的,通过COM接口进行调用。在.Net平台下要应用SAPI5.1,我们可以利用.Net Framework自带的强大工具TlbImp.exe来把SAPI SDK的COM对象导入到.Net中。TlbImp.exe产生一个管制的包装类,管理客户端可以使用它。包装类管理实际的COM对象的参考数。当包装类当作收集的垃圾时,包装类释放掉它包装的COM对象。当然,你也可以在VS.NET环境中通过从项目参考对话框选择COM对象,实现COM对象的导入,这个过程也是通过TlbImp.exe来完成的。
下面演示如何导入SAPI的COM对象:
D:\Program Files\Common Files\Microsoft Shared\Speech>Tlbimp sapi.dll /out: DotNetSpeech.dll
在安转SDK以后,可以在D:\Program Files\Common Files\Microsoft Shared\Speech\目录下面找到SAPI.dll,这里面定义了SAPI的COM对象,用Tlbimp.exe工具将该dll转换成.net平台下的Assembly---DotNetSpeech.dll,转换的过程会提示不少的警告(warning),但这部影响我们的开发,可以忽略。最后,我们可以用ildasm查看DotnetSpeech.dll里面的对象。

3. 用C#开发中文TTS应用程序示例
下面通过一个实例来介绍如何利用C# 进行开发语音应用程序,开发环境为:
操作系统: Windows 2000 中文版+ SP3
.Net Framework: 1.0.3705(英文版)
Visual Studio.Net 7.0.9466(英文版)
首先,新建一个C#的Windows Application工程SpeechApp,在开发环境的右边的解决方案管理器(Solution Explorer)中,添加DotNetSpeech对象库。右键点击"Reference"(参考),选择"Add Reference"(添加参考),在弹出的文件选择对话框中找到刚才生成的DotNetSpeech.dll。

图(2)
打开Form1.cs代码文件,在代码开头添加名字空间(注意大小写)。
using DotNetSpeech;
这样就实现了SAPI SDK的导入,下面我们就可以开始编写应用代码了。本示例演示如何把文本通过喇叭朗读出来以及把文本转化成语音信号(Wave声音文件),程序界面如图(3):

//朗读
private void buttonSynthesis_Click(object sender, System.EventArgs e)
{
	try
{
		SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
		SpVoice Voice = new SpVoice();	
		Voice.Speak(this.textBoxText.Text, SpFlags);
	}
	catch(Exception er)
	{
MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
	}
}
//生成声音文件(Wav)
private void buttonTTStoWave_Click(object sender, System.EventArgs e)
{
	try
{
		SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
		SpVoice Voice = new SpVoice();	
		SaveFileDialog sfd = new SaveFileDialog();
		sfd.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
		sfd.Title = "Save to a wave file";
		sfd.FilterIndex = 2;
		sfd.RestoreDirectory = true;
		if (sfd.ShowDialog()== DialogResult.OK) 
		{
			SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
			SpFileStream SpFileStream = new SpFileStream();
			SpFileStream.Open(sfd.FileName, SpFileMode, false);
			Voice.AudioOutputStream = SpFileStream;
			Voice.Speak(txtSpeakText.Text, SpFlags);
			Voice.WaitUntilDone(Timeout.Infinite);
		     SpFileStream.Close();
		}
	}
	catch(Exception er)
	{
MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
	}
}
接下来,还要去控制面板配置Speech SDK引擎当前所处理语言。打开"控制面板",打开"语音"配置项目,可以看到在这里我们可以指定当前可以对何种语言进行识别或者合成,还可以配置相关的硬件设备以及控制语速。(如图4)

在"文字-语音转换"的"语音选择"组合框中选择简体中文(Microsoft Simplified Chinese)。这样就可以合成汉语文字了。
回到VS.Net,F5编译运行刚才的应用程序,在文本框里输入汉字,戴上耳机,点击"朗读"按钮,开始体验新一代的智能人机界面吧,呵呵:)

4. 结论
微软为语音人机界面提供了强大的平台,.net环境更使这种开发方便快捷。赶快去下载SAPI5.1 SDK,让你的应用程序"绘声绘色",体现Nature UI,Let’s GO!!!

5. 参考文献
[1] Speech SDK自带的说明文档(SAPI.chm)
[2] MSDN (msdn.microsoft.com)

作者:陈本峰

版权声明
凡在本网站发表的文章,作者必须保证是原创文章;如果不是原创文章,由此带来的版权纠纷由作者自己承担。微软有义务对本站点发表的文章进行审核,但您需要考虑这些文章的使用风险。本站点仅提供一个用户相互交换技术信息和学习的园地,并不对来自社区用户的技术文章承担任何风险。

10:53 | 评论 (0)

2006年9月3日 #

ComponentArt WebUI 2006.1 for ASP.NET 2.0 破解成功!!

无聊在网上瞎逛看到一套爆强的东西

http://www.componentart.com/

看看价格好贵阿

还是自己破解掉算了

哈哈哈哈

 

10:54 | 评论 (8)

2006年7月26日 #

一个功能齐全的DataGrid分页例子

下面的这个例子提供了DataGrid的分页功能。aspx代码和Cohe Behind代码分别如下,注意更改数据录连接字符串。结果如下:

C#版本 例子

DataGridPaging.aspx

<%@ Page language="c#" EnableViewState = "true" Codebehind="DataGridPaging.aspx.cs" AutoEventWireup="false" Inherits="eMeng.Exam.DataGridPaging.DataGridPaging" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <meta content="Visual Basic 7.0" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" runat="server"> <asp:datagrid id="MyDataGrid" runat="server" AutoGenerateColumns="False" HorizontalAlign="Center" AlternatingItemStyle-BackColor="#eeeeee" HeaderStyle-BackColor="#aaaadd" Font-Size="8pt" Font-Name="Verdana" CellSpacing="0" CellPadding="3" GridLines="Both" BorderWidth="1" BorderColor="black" OnPageIndexChanged="MyDataGrid_Page" PagerStyle-HorizontalAlign="Right" PagerStyle-Mode="NumericPages" PageSize="5" AllowPaging="True"> <AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle> <HeaderStyle BackColor="#AAAADD" Font-Bold="True" HorizontalAlign="Center"></HeaderStyle> <PagerStyle HorizontalAlign="Right" Mode="NumericPages"></PagerStyle> <Columns> <asp:BoundColumn HeaderText="标题" DataField="Title" HeaderStyle-Width="480px"> </asp:BoundColumn> <asp:BoundColumn HeaderText="发表日期" DataField="CreateDate" DataFormatString="{0:yyyy-MM-dd hh:mm:ss}"> </asp:BoundColumn> </Columns> </asp:datagrid> <p style="FONT-SIZE:9pt" align="center"> <asp:label id="lblPageCount" runat="server"></asp:label>&nbsp; <asp:label id="lblCurrentIndex" runat="server"></asp:label> <asp:linkbutton id="btnFirst" onclick="PagerButtonClick" runat="server" Font-Name="verdana" Font-size="8pt" ForeColor="navy" CommandArgument="0"></asp:linkbutton>&nbsp; <asp:linkbutton id="btnPrev" onclick="PagerButtonClick" runat="server" Font-Name="verdana" Font-size="8pt" ForeColor="navy" CommandArgument="prev"></asp:linkbutton>&nbsp; <asp:linkbutton id="btnNext" onclick="PagerButtonClick" runat="server" Font-Name="verdana" Font-size="8pt" ForeColor="navy" CommandArgument="next"></asp:linkbutton>&nbsp; <asp:linkbutton id="btnLast" onclick="PagerButtonClick" runat="server" Font-Name="verdana" Font-size="8pt" ForeColor="navy" CommandArgument="last"></asp:linkbutton> </p> </form> </body> </HTML>

DataGridPaging.aspx.cs

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace eMeng.Exam.DataGridPaging { /// <summary> /// DataGridPaging 的摘要说明。 /// </summary> public class DataGridPaging : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid MyDataGrid; protected System.Web.UI.WebControls.Label lblPageCount; protected System.Web.UI.WebControls.Label lblCurrentIndex; protected System.Web.UI.WebControls.LinkButton btnFirst; protected System.Web.UI.WebControls.LinkButton btnPrev; protected System.Web.UI.WebControls.LinkButton btnNext; protected System.Web.UI.WebControls.LinkButton btnLast; private OleDbConnection cn = new OleDbConnection(); private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 btnFirst.Text = "最首页"; btnPrev.Text = "前一页"; btnNext.Text = "下一页"; btnLast.Text = "最后页"; OpenDatabase(); BindGrid(); } private void OpenDatabase() { cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("xxxx.mdb"); cn.Open(); } private void ShowStats() { lblCurrentIndex.Text = "第 " + (MyDataGrid.CurrentPageIndex + 1).ToString() + " 页"; lblPageCount.Text = "总共 " + MyDataGrid.PageCount.ToString() + " 页"; } public void PagerButtonClick(object sender, EventArgs e) { string arg = ((LinkButton)sender).CommandArgument.ToString(); switch(arg) { case "next": if (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1)) { MyDataGrid.CurrentPageIndex += 1; } break; case "prev": if (MyDataGrid.CurrentPageIndex > 0) { MyDataGrid.CurrentPageIndex -= 1; } break; case "last": MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1); break; default: MyDataGrid.CurrentPageIndex = System.Convert.ToInt32(arg); break; } BindGrid(); ShowStats(); } public void BindGrid() { OleDbConnection myConnection = cn; DataSet ds = new DataSet(); OleDbDataAdapter adapter = new OleDbDataAdapter("Select Title,CreateDate from Document", myConnection); adapter.Fill(ds, "Document"); MyDataGrid.DataSource = ds.Tables["Document"].DefaultView; MyDataGrid.DataBind(); ShowStats(); } public void MyDataGrid_Page(object sender, DataGridPageChangedEventArgs e) { int startIndex ; startIndex = MyDataGrid.CurrentPageIndex * MyDataGrid.PageSize; MyDataGrid.CurrentPageIndex = e.NewPageIndex; BindGrid(); ShowStats(); } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } }

VB.NET版本

DataGridPaging.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="DataGridPaging.aspx.vb" Inherits="DataGridPaging"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <meta content="Visual Basic 7.0" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" runat="server"> <asp:datagrid id="MyDataGrid" runat="server" AlternatingItemStyle-BackColor="#eeeeee" HeaderStyle-BackColor="#aaaadd" Font-Size="8pt" Font-Name="Verdana" CellSpacing="0" CellPadding="3" GridLines="Both" BorderWidth="1" BorderColor="black" OnPageIndexChanged="MyDataGrid_Page" PagerStyle-HorizontalAlign="Right" PagerStyle-Mode="NumericPages" PageSize="5" AllowPaging="True"> <AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle> <HeaderStyle BackColor="#AAAADD"></HeaderStyle> <PagerStyle HorizontalAlign="Right" Mode="NumericPages"></PagerStyle> </asp:datagrid> <p style="font-size:9pt"> <asp:label id="lblPageCount" runat="server"></asp:label>&nbsp; <asp:label id="lblCurrentIndex" runat="server"></asp:label> <asp:linkbutton id="btnFirst" onclick="PagerButtonClick" runat="server" Font-Name="verdana" Font-size="8pt" ForeColor="navy" CommandArgument="0"> </asp:linkbutton>&nbsp; <asp:linkbutton id="btnPrev" onclick="PagerButtonClick" runat="server" Font-Name="verdana" Font-size="8pt" ForeColor="navy" CommandArgument="prev"> </asp:linkbutton>&nbsp; <asp:linkbutton id="btnNext" onclick="PagerButtonClick" runat="server" Font-Name="verdana" Font-size="8pt" ForeColor="navy" CommandArgument="next"> </asp:linkbutton>&nbsp; <asp:linkbutton id="btnLast" onclick="PagerButtonClick" runat="server" Font-Name="verdana" Font-size="8pt" ForeColor="navy" CommandArgument="last"> </asp:linkbutton> </p> </form> </body> </HTML>

DataGridPaging.aspx.vb

Imports System.Data.SqlClient Imports System.Data Imports System.Web.UI Public Class DataGridPaging Inherits System.Web.UI.Page Protected WithEvents MyDataGrid As System.Web.UI.WebControls.DataGrid Protected WithEvents btnFirst As System.Web.UI.WebControls.LinkButton Protected WithEvents btnPrev As System.Web.UI.WebControls.LinkButton Protected WithEvents btnNext As System.Web.UI.WebControls.LinkButton Protected WithEvents btnLast As System.Web.UI.WebControls.LinkButton Protected WithEvents lblCurrentIndex As System.Web.UI.WebControls.Label Protected WithEvents lblPageCount As System.Web.UI.WebControls.Label Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid #Region " Web Form Designer Generated Code " 'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles MyBase.Load btnFirst.Text = "最首页" btnPrev.Text = "前一页" btnNext.Text = "下一页" btnLast.Text = "最后页" OpenDatabase() BindGrid() End Sub Sub MyDataGrid_Page(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs) Dim startIndex As Integer startIndex = MyDataGrid.CurrentPageIndex * MyDataGrid.PageSize MyDataGrid.CurrentPageIndex = e.NewPageIndex BindGrid() ShowStats() End Sub Sub BindGrid() Dim myConnection As SqlConnection = cn Dim ds As DataSet = New DataSet() Dim adapter As SqlDataAdapter = New SqlDataAdapter("Select * from Orders", myConnection) adapter.Fill(ds, "Orders") MyDataGrid.DataSource = ds.Tables("Orders").DefaultView MyDataGrid.DataBind() ShowStats() End Sub Sub PagerButtonClick(ByVal sender As Object, ByVal e As EventArgs) 'used by external paging UI Dim arg As String = sender.CommandArgument Select Case arg Case "next" If (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1)) Then MyDataGrid.CurrentPageIndex += 1 End If Case "prev" If (MyDataGrid.CurrentPageIndex > 0) Then MyDataGrid.CurrentPageIndex -= 1 End If Case "last" MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1) Case Else 'page number MyDataGrid.CurrentPageIndex = System.Convert.ToInt32(arg) End Select BindGrid() ShowStats() End Sub Sub ShowStats() lblCurrentIndex.Text = "第 " + (MyDataGrid.CurrentPageIndex + 1).ToString() + " 页" lblPageCount.Text = "总共 " + MyDataGrid.PageCount.ToString() + " 页" End Sub Public cn As New SqlClient.SqlConnection() Public Sub OpenDatabase() cn.ConnectionString = "Server=.;Database=NorthWind;User Id=sa;Password=;" cn.Open() End Sub End Class

方法2:完全后代码写法:例子

DataGridPaging2.aspx

<%@ Page language="c#" EnableViewState = "true" Codebehind="DataGridPaging2.aspx.cs" AutoEventWireup="false" Inherits="eMeng.Exam.DataGridPaging2.DataGridPaging2" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>功能齐全的分页的例子【2】</TITLE> <meta content="Visual Basic 7.0" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" runat="server"> <asp:datagrid id="MyDataGrid" runat="server" AutoGenerateColumns="False" HorizontalAlign="Center" AlternatingItemStyle-BackColor="#eeeeee" HeaderStyle-BackColor="#aaaadd" Font-Size="8pt" Font-Name="Verdana" CellSpacing="0" CellPadding="3" GridLines="Both" BorderWidth="1" BorderColor="black" PagerStyle-HorizontalAlign="Right" PagerStyle-Mode="NumericPages" PageSize="5" AllowPaging="True"> <AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle> <HeaderStyle BackColor="#AAAADD" Font-Bold="True" HorizontalAlign="Center"></HeaderStyle> <PagerStyle HorizontalAlign="Right" Mode="NumericPages"></PagerStyle> <Columns> <asp:BoundColumn HeaderText="标题" DataField="Title" HeaderStyle-Width="480px"></asp:BoundColumn> <asp:BoundColumn HeaderText="发表日期" DataField="CreateDate" DataFormatString="{0:yyyy-MM-dd hh:mm:ss}"></asp:BoundColumn> </Columns> </asp:datagrid> <p align="center"> <asp:label id="lblPageCount" runat="server" Font-Size="9pt" Font-Bold="True"></asp:label>&nbsp; <asp:label id="lblCurrentIndex" runat="server" Font-Size="9pt" Font-Bold="True"></asp:label> <asp:linkbutton id="btnFirst" runat="server" Font-size="9pt" ForeColor="navy" CommandArgument="0"/>&nbsp; <asp:linkbutton id="btnPrev" runat="server" Font-size="9pt" ForeColor="navy" CommandArgument="prev"/>&nbsp; <asp:linkbutton id="btnNext" runat="server" Font-size="9pt" ForeColor="navy" CommandArgument="next"/>&nbsp; <asp:linkbutton id="btnLast" runat="server" Font-size="9pt" ForeColor="navy" CommandArgument="last"/> </p> </form> </body> </HTML>

DataGridPaging2.aspx.cs

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace eMeng.Exam.DataGridPaging2 { /// <summary> /// DataGridPaging 的摘要说明。 /// </summary> public class DataGridPaging2 : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid MyDataGrid; protected System.Web.UI.WebControls.Label lblPageCount; protected System.Web.UI.WebControls.Label lblCurrentIndex; protected System.Web.UI.WebControls.LinkButton btnFirst; protected System.Web.UI.WebControls.LinkButton btnPrev; protected System.Web.UI.WebControls.LinkButton btnNext; protected System.Web.UI.WebControls.LinkButton btnLast; private OleDbConnection cn = new OleDbConnection(); private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 btnFirst.Text = "最首页"; btnPrev.Text = "前一页"; btnNext.Text = "下一页"; btnLast.Text = "最后页"; OpenDatabase(); BindGrid(); } private void OpenDatabase() { cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("../../aspxWeb.mdb.ascx"); cn.Open(); } private void ShowStats() { lblCurrentIndex.Text = "第 " + (MyDataGrid.CurrentPageIndex + 1).ToString() + " 页"; lblPageCount.Text = "总共 " + MyDataGrid.PageCount.ToString() + " 页"; } public void PagerButtonClick(object sender, EventArgs e) { string arg = ((LinkButton)sender).CommandArgument.ToString(); switch(arg) { case "next": if (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1)) { MyDataGrid.CurrentPageIndex += 1; } break; case "prev": if (MyDataGrid.CurrentPageIndex > 0) { MyDataGrid.CurrentPageIndex -= 1; } break; case "last": MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1); break; default: MyDataGrid.CurrentPageIndex = System.Convert.ToInt32(arg); break; } BindGrid(); ShowStats(); } public void BindGrid() { OleDbConnection myConnection = cn; DataSet ds = new DataSet(); OleDbDataAdapter adapter = new OleDbDataAdapter("Select Title,CreateDate from Document", myConnection); adapter.Fill(ds, "Document"); MyDataGrid.DataSource = ds.Tables["Document"].DefaultView; MyDataGrid.DataBind(); ShowStats(); } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.MyDataGrid.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.OnPageIndexChanged); this.btnFirst.Click += new System.EventHandler(this.PagerButtonClick); this.btnPrev.Click += new System.EventHandler(this.PagerButtonClick); this.btnNext.Click += new System.EventHandler(this.PagerButtonClick); this.btnLast.Click += new System.EventHandler(this.PagerButtonClick); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void OnPageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { int startIndex ; startIndex = MyDataGrid.CurrentPageIndex * MyDataGrid.PageSize; MyDataGrid.CurrentPageIndex = e.NewPageIndex; BindGrid(); ShowStats(); } } }

17:46 | 评论 (0)

把Excel文件中的数据读入到DataGrid中

使用Excel文件做为DataGrid的数据源是非常简单的,一旦数据被装载进来,就可以把数据再保存进SQL Server或XML中。我们只需要简单地使用OLE DB Provider 来访问Excel文件,然后返回DataSet即可。
下面是要显示的Excel数据contact.xls:

姓名
性别
地址
net_lover Male amxh@21cn.com
amxh Male amxh@21cn.com
孟子 E Male amxh@21cn.com


只需要指定Excel路径,并用[]选择一个工作表即可。

完整代码如下:
<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%>

<script runat="server">

private DataSet CreateDataSource(){
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=C:\\Inetpub\\wwwroot\\contacts.xls;"+
"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [ContactList$]", strConn);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet);
return myDataSet;
}


public void Page_Load(Object sender, EventArgs e){
if (!IsPostBack) {
mygrid.DataSource = CreateDataSource();
mygrid.DataBind();
}

}


</script>


<center>
<form runat="server">
<asp:datagrid runat="server" AutoGenerateColumns="false"
width="500" id="mygrid">

<HeaderStyle BorderColor="White" BackColor="black"
ForeColor="White"
Font-Bold="True"
Font-Name="Arial"
Font-Size="9" HorizontalAlign="Center"/>

<ItemStyle   BorderColor=""
BackColor="#FFFFF0"
ForeColor="Black"
Font-Name="Arial"
Font-Size="8"
Font-Bold="False" HorizontalAlign="Center"/>

<Columns>

<asp:BoundColumn HeaderText="姓名" ReadOnly="true" DataField="姓名"/>
<asp:BoundColumn HeaderText="性别" ReadOnly="true" DataField="性别"/>
<asp:BoundColumn HeaderText="Email" ReadOnly="true" DataField="地址"/>
</Columns>

</asp:datagrid>
</form>

17:45 | 评论 (0)

通过Web Services上传和下载文件

随着Internet技术的发展和跨平台需求的日益增加,Web Services的应用越来越广,我们不但需要通过Web Services传递字符串信息,而且需要传递二进制文件信息。下面,我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器。

一:通过Web Services显示和下载文件

我们这里建立的Web Services的名称为GetBinaryFile,提供两个公共方法:分别是GetImage()和GetImageType(),前者返回二进制文件字节数组,后者返回文件类型,其中,GetImage()方法有一个参数,用来在客户端选择要显示或下载的文件名字。这里我们所显示和下载的文件可以不在虚拟目录下,采用这个方法的好处是:可以根据权限对文件进行显示和下载控制,从下面的方法我们可以看出,实际的文件位置并没有在虚拟目录下,因此可以更好地对文件进行权限控制,这在对安全性有比较高的情况下特别有用。这个功能在以前的ASP程序中可以用Stream对象实现。为了方便读者进行测试,这里列出了全部的源代码,并在源代码里进行介绍和注释。

首先,建立GetBinaryFile.asmx文件:

我们可以在VS.NET里新建一个C#的aspxWebCS工程,然后“添加新项”,选择“Web服务”,并设定文件名为:GetBinaryFile.asmx,在“查看代码”中输入以下代码,即:GetBinaryFile.asmx.cs:

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.UI; using System.Web.Services; using System.IO; namespace xml.sz.luohuedu.net.aspxWebCS { /// <summary> /// GetBinaryFile 的摘要说明。 /// Web Services名称:GetBinaryFile /// 功能:返回服务器上的一个文件对象的二进制字节数组。 /// </summary> [WebService(Namespace="http://xml.sz.luohuedu.net/", Description="在Web Services里利用.NET框架进行传递二进制文件。")] public class GetBinaryFile : System.Web.Services.WebService { #region Component Designer generated code //Web 服务设计器所必需的 private IContainer components = null; /// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if(disposing && components != null) { components.Dispose(); } base.Dispose(disposing); } #endregion public class Images: System.Web.Services.WebService { /// <summary> /// Web 服务提供的方法,返回给定文件的字节数组。 /// </summary> [WebMethod(Description="Web 服务提供的方法,返回给定文件的字节数组")] public byte[] GetImage(string requestFileName) { ///得到服务器端的一个图片 ///如果你自己测试,注意修改下面的实际物理路径 if(requestFileName == null || requestFileName == "") return getBinaryFile("D:\\Picture.JPG"); else return getBinaryFile("D:\\" + requestFileName); } /// <summary> /// getBinaryFile:返回所给文件路径的字节数组。 /// </summary> /// <param name="filename"></param> /// <returns></returns> public byte[] getBinaryFile(string filename) { if(File.Exists(filename)) { try { ///打开现有文件以进行读取。 FileStream s = File.OpenRead(filename); return ConvertStreamToByteBuffer(s); } catch(Exception e) { return new byte[0]; } } else { return new byte[0]; } } /// <summary> /// ConvertStreamToByteBuffer:把给定的文件流转换为二进制字节数组。 /// </summary> /// <param name="theStream"></param> /// <returns></returns> public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream) { int b1; System.IO.MemoryStream tempStream = new System.IO.MemoryStream(); while((b1=theStream.ReadByte())!=-1) { tempStream.WriteByte(((byte)b1)); } return tempStream.ToArray(); } [WebMethod(Description="Web 服务提供的方法,返回给定文件类型。")] public string GetImageType() { ///这里只是测试,您可以根据实际的文件类型进行动态输出 return "image/jpg"; } } } }

一旦我们创建了上面的asmx文件,进行编译后,我们就可以编写客户端的代码来进行调用这个Web Services了。

我们先“添加Web引用”,输入:http://localhost/aspxWebCS/GetBinaryFile.asmx。下面,我们编写显示文件的中间文件:GetBinaryFileShow.aspx,这里,我们只需要在后代码里编写代码即可,GetBinaryFileShow.aspx.cs文件内容如下:

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Web.Services; namespace aspxWebCS { /// <summary> /// GetBinaryFileShow 的摘要说明。 /// </summary> public class GetBinaryFileShow : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 ///定义并初始化文件对象; xml.sz.luohuedu.net.aspxWebCS.GetBinaryFile.Images oImage; oImage = new xml.sz.luohuedu.net.aspxWebCS.GetBinaryFile.Images(); ///得到二进制文件字节数组; byte[] image = oImage.GetImage(""); ///转换为支持存储区为内存的流 System.IO.MemoryStream memStream = new System.IO.MemoryStream(image); ///定义并实例化Bitmap对象 Bitmap bm = new Bitmap(memStream); ///根据不同的条件进行输出或者下载; Response.Clear(); ///如果请求字符串指定下载,就下载该文件; ///否则,就显示在浏览器中。 if(Request.QueryString["Download"]=="1") { Response.Buffer = true; Response.ContentType = "application/octet-stream"; ///这里下载输出的文件名字 ok.jpg 为例子,你实际中可以根据情况动态决定。 Response.AddHeader("Content-Disposition","attachment;filename=ok.jpg"); } else Response.ContentType = oImage.GetImageType(); Response.BinaryWrite(image); Response.End(); } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } }

最后,我们就编写最终的浏览页面:GetBinaryFile.aspx,这个文件很简单,只需要aspx文件即可,内容如下:

<%@ Page language="c#" Codebehind="GetBinaryFile.aspx.cs" AutoEventWireup="false" Inherits="aspxWebCS.GetBinaryFile" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>通过Web Services显示和下载文件</title> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="GetBinaryFile" method="post" runat="server"> <FONT face="宋体"> <asp:HyperLink id="HyperLink1" NavigateUrl="GetBinaryFileShow.aspx?Download=1" runat="server">下载文件</asp:HyperLink> <br/> <!--下面是直接显示文件--> <asp:Image id="Image1" ImageUrl="GetBinaryFileShow.aspx" runat="server"></asp:Image> </FONT> </form> </body> </HTML>

二:通过Web Services上载文件

向服务器上载文件可能有许多种方法,在利用Web Services上载文件的方法中,下面的这个方法应该是最简单的了。我们仍象前面的例子那样,首先建立Upload.asmx文件,其Upload.asmx.cs内容如下,里面已经做了注释:

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; using System.IO; namespace xml.sz.luohuedu.net.aspxWebCS { /// <summary> /// Upload 的摘要说明。 /// </summary> [WebService(Namespace="http://xml.sz.luohuedu.net/", Description="在Web Services里利用.NET框架进上载文件。")] public class Upload : System.Web.Services.WebService { public Upload() { //CODEGEN:该调用是 ASP.NET Web 服务设计器所必需的 InitializeComponent(); } #region Component Designer generated code //Web 服务设计器所必需的 private IContainer components = null; /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { } /// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if(disposing && components != null) { components.Dispose(); } base.Dispose(disposing); } #endregion [WebMethod(Description="Web 服务提供的方法,返回是否文件上载成功与否。")] public string UploadFile(byte[] fs,string FileName) { try { ///定义并实例化一个内存流,以存放提交上来的字节数组。 MemoryStream m = new MemoryStream(fs); ///定义实际文件对象,保存上载的文件。 FileStream f = new FileStream(Server.MapPath(".") + "\\" + FileName, FileMode.Create); ///把内内存里的数据写入物理文件 m.WriteTo(f); m.Close(); f.Close(); f = null; m = null; return "文件已经上传成功。"; } catch(Exception ex) { return ex.Message; } } } }

要上载文件,必须提供一个表单,来供用户进行文件的选择,下面我们就建立这样一个页面Upload.aspx,用来提供文件上载:

<%@ Page language="c#" Codebehind="Upload.aspx.cs" AutoEventWireup="false" Inherits="aspxWebCS.Upload" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>通过Web Services上载文件</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server" enctype="multipart/form-data"> <INPUT id="MyFile" type="file" runat="server"> <br> <br> <asp:Button id="Button1" runat="server" Text="上载文件"></asp:Button> </form> </body> </HTML>

我们要进行处理的是在后代码里面,下面详细的介绍,Upload.aspx.cs:

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Web.Services; using System.IO; namespace aspxWebCS { /// <summary> /// Upload 的摘要说明。 /// 利用该方法通过Web Services上载文件 /// </summary> public class Upload : System.Web.UI.Page { protected System.Web.UI.HtmlControls.HtmlInputFile MyFile; protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Button1.Click += new System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { ///首先得到上载文件信息和文件流 if(MyFile.PostedFile != null) { System.Web.HttpFileCollection oFiles; oFiles = System.Web.HttpContext.Current.Request.Files; if(oFiles.Count < 1) { Response.Write ("请选择文件。"); Response.End(); } string FilePath = oFiles[0].FileName; if(FilePath == "" || FilePath == null) { Response.Write ("请选择一个文件。"); Response.End(); } string FileName = FilePath.Substring(FilePath.LastIndexOf("\\")+1); try { ///处理上载的文件流信息。 byte[] b = new byte[oFiles[0].ContentLength]; System.IO.Stream fs; xml.sz.luohuedu.net.aspxWebCS.Upload o; o = new xml.sz.luohuedu.net.aspxWebCS.Upload(); fs = (System.IO.Stream)oFiles[0].InputStream; fs.Read(b, 0, oFiles[0].ContentLength); ///调用Web Services的UploadFile方法进行上载文件。 Response.Write(o.UploadFile(b, FileName)); fs.Close(); } catch(Exception ex) { Response.Write(ex.Message); } } else { Response.Write("请选择文件"); } } } }

最后,需要注意的是:在保存文件时,您应该确保指定文件的完整路径(例如,"C:\MyFiles\Picture.jpg"),并确保为 ASP.NET 使用的帐户提供要存储文件的目录的写权限。上载大文件时,可使用 元素的 maxRequestLength 属性来增加文件大小的最大允许值,例如:

<configuration> <system.web> <httpRuntime maxRequestLength="1048576" executionTimeout="3600" /> </system.web> </configuration>

其中:maxRequestLength:指示 ASP.NET 支持的HTTP方式上载的最大字节数。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。executionTimeout:指示在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。在当文件超出指定的大小时,如果浏览器中会产生 DNS 错误或者出现服务不可得到的情况,也请修改以上的配置,把配置数加大。

另外,上载大文件时,还可能会收到以下错误信息:

aspnet_wp.exe (PID: 1520) 被回收,因为内存消耗超过了 460 MB(可用 RAM 的百分之 60)。

如果遇到此错误信息,请增加应用程序的 Web.config 文件的 元素中 memoryLimit 属性的值。例如:

<configuration> <system.web> <processModel memoryLimit="80"/> </system.web> </configuration>

我在自己的机器上测试,可以上传50M以上的文件。以上代码在Windows XP + .NET 1.0 + VS.NET2002下测试通过。

17:41 | 评论 (1)

把图象文件转换成XML格式文件

利用.NET 框架下的FromBase64String和ToBase64String方法可以很容易地实现图象文件和XML文件的互换。这样可以轻易解决以XML格式保存图片的问题。代码如下:

Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows 窗体设计器生成的代码 " Public Sub New() MyBase.New() InitializeComponent() '在 InitializeComponent() 调用之后添加任何初始化 End Sub '窗体重写处置以清理组件列表。 Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意:以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改此过程。 '不要使用代码编辑器修改它。 Friend WithEvents Button1 As System.Windows.Forms.Button Friend WithEvents Button2 As System.Windows.Forms.Button Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox Friend WithEvents Button3 As System.Windows.Forms.Button Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents Label2 As System.Windows.Forms.Label <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button() Me.Button2 = New System.Windows.Forms.Button() Me.PictureBox1 = New System.Windows.Forms.PictureBox() Me.Button3 = New System.Windows.Forms.Button() Me.Label1 = New System.Windows.Forms.Label() Me.Label2 = New System.Windows.Forms.Label() Me.SuspendLayout() ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(365, 63) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(115, 23) Me.Button1.TabIndex = 0 Me.Button1.Text = "将图象保存成XML" ' 'Button2 ' Me.Button2.Location = New System.Drawing.Point(365, 98) Me.Button2.Name = "Button2" Me.Button2.Size = New System.Drawing.Size(115, 23) Me.Button2.TabIndex = 1 Me.Button2.Text = "从XML中得到图象" ' 'PictureBox1 ' Me.PictureBox1.Location = New System.Drawing.Point(18, 6) Me.PictureBox1.Name = "PictureBox1" Me.PictureBox1.Size = New System.Drawing.Size(320, 460) Me.PictureBox1.TabIndex = 2 Me.PictureBox1.TabStop = False ' 'Button3 ' Me.Button3.Location = New System.Drawing.Point(365, 28) Me.Button3.Name = "Button3" Me.Button3.Size = New System.Drawing.Size(115, 23) Me.Button3.TabIndex = 3 Me.Button3.Text = "浏览图片&#8230;" ' 'Label1 ' Me.Label1.Location = New System.Drawing.Point(369, 135) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(105, 95) Me.Label1.TabIndex = 4 ' 'Label2 ' Me.Label2.Location = New System.Drawing.Point(367, 437) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(130, 16) Me.Label2.TabIndex = 5 Me.Label2.Text = "【孟宪会之精彩世界】" ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(500, 480) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Label2, Me.Label1, Me.Button3, Me.PictureBox1, Me.Button2, Me.Button1}) Me.Name = "Form1" Me.Text = "图象文件和XML格式文件互换例子" Me.ResumeLayout(False) End Sub #End Region Private MyFile As String = "" Private MyFileExt As String = "" Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button2.Click Dim pic As String Dim MyXml As System.Xml.XmlDocument = New System.Xml.XmlDocument() MyXml.Load("c:\MyPhoto.xml") Dim picNode As System.Xml.XmlNode picNode = MyXml.SelectSingleNode("/pic/photo") pic = picNode.InnerText Dim memoryStream As System.IO.MemoryStream memoryStream = New System.IO.MemoryStream(Convert.FromBase64String(pic)) Me.PictureBox1.Image = New System.Drawing.Bitmap(memoryStream) memoryStream.Close() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click If MyFile = "" Then MessageBox.Show("请选择一个图片!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning) Exit Sub End If Dim MyImg As System.Drawing.Image = MyImg.FromFile(MyFile) Dim memoryStream As System.IO.MemoryStream = New System.IO.MemoryStream() MyImg.Save(memoryStream, GetImageType(MyFileExt)) Dim b() As Byte b = memoryStream.GetBuffer() Dim pic As String = Convert.ToBase64String(b) memoryStream.Close() Dim MyXml As System.Xml.XmlDocument = New System.Xml.XmlDocument() MyXml.LoadXml("<pic><name>孟宪会</name><photo>" + pic + "</photo></pic>") MyXml.Save("c:\MyPhoto.xml") Label1.Text = "文件被保存到了:" + Microsoft.VisualBasic.ChrW(13) + "c:\MyPhoto.xml" End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button3.Click Dim openFileDialog1 As New OpenFileDialog() openFileDialog1.InitialDirectory = "c:\" openFileDialog1.Filter = "PNG(*.png)|*.png|Gif(*.gif)|*.gif|Jpg(*.jpg)|*.jpg|所有图象文件(*.*)|*.*" openFileDialog1.FilterIndex = 2 openFileDialog1.RestoreDirectory = True If openFileDialog1.ShowDialog() = DialogResult.OK Then MyFile = openFileDialog1.FileName() MyFileExt = MyFile.Substring(MyFile.LastIndexOf(".") + 1) End If End Sub Public Function GetImageType(ByVal str As String) As System.Drawing.Imaging.ImageFormat Select Case str.ToLower() Case "jpg" Return System.Drawing.Imaging.ImageFormat.Jpeg Case "gif" Return System.Drawing.Imaging.ImageFormat.Gif Case "tiff" Return System.Drawing.Imaging.ImageFormat.Tiff() Case "icon" Return System.Drawing.Imaging.ImageFormat.Icon Case "image/png" Return System.Drawing.Imaging.ImageFormat.Png Case Else Return System.Drawing.Imaging.ImageFormat.MemoryBmp End Select End Function Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) _ Handles MyBase.Closing System.Diagnostics.Process.Start("IExplore.exe", "http://xml.sz.luohuedu.net/") End Sub End Class

17:41 | 评论 (0)

一个不需要CDO和IIS发送邮件的例子

下面的例子是转载国外的,可以实现不使用CDO和IIS发送邮件。说明:本例子没有经过测试,原地址在:
http://www.dotnetforums.net/t81508.html

VB.NET:


Imports System
Imports System.Text
Imports System.Windows.Forms
Public Class cSMTP
    Private m_sSender As String
    Private m_sUser As String
    Private m_sSenderName As String
    Private m_sRecipient As String
    Private m_sRecipientName As String
    Private m_sServer As String
    Private m_iPort As Integer
    Private m_sSubject As String
    Private m_sBody As String

    Private m_iTimeOut As Integer
    Private m_colCC As Collection
    Private m_colCC_OK As Collection

    Private Structure TRecipient
        Dim strEMail As String
        Dim strName As String
        Dim bBlind As Boolean
    End Structure

    Private tcpClient As System.Net.Sockets.TcpClient
    Private networkStream As System.Net.Sockets.NetworkStream

    Public Property Timeout() As Integer
        Get
            Timeout = m_iTimeOut
        End Get
        Set(ByVal Value As Integer)
            m_iTimeOut = Value
        End Set
    End Property

    Public Property User() As String
        Get
            User = m_sUser
        End Get
        Set(ByVal s As String)
            m_sUser = s
        End Set
    End Property

    Public Property Subject() As String
        Get
            Subject = m_sSubject
        End Get
        Set(ByVal s As String)
            m_sSubject = s
        End Set
    End Property

    Public Property Body() As String
        Get
            Body = m_sBody
        End Get
        Set(ByVal s As String)
            m_sBody = s
        End Set
    End Property

    Public Property Sender() As String
        Get
            Sender = m_sSender
        End Get
        Set(ByVal s As String)
            m_sSender = s
        End Set
    End Property

    Public Property SenderName() As String
        Get
            SenderName = m_sSenderName
        End Get
        Set(ByVal s As String)
            m_sSenderName = s
        End Set
    End Property

    Public Property Recipient() As String
        Get
            Recipient = m_sRecipient
        End Get
        Set(ByVal s As String)
            m_sRecipient = s
        End Set
    End Property

    Public Property RecipientName() As String
        Get
            RecipientName = m_sRecipientName
        End Get
        Set(ByVal s As String)
            m_sRecipientName = s
        End Set
    End Property

    Public Property Server() As String
        Get
            Server = m_sServer
        End Get
        Set(ByVal s As String)
            m_sServer = s
        End Set
    End Property

    Public Property Port() As Integer
        Get
            Port = m_iPort
        End Get
        Set(ByVal i As Integer)
            m_iPort = i
        End Set
    End Property

    Private Sub Init()
        m_sBody = ""
        m_sSubject = ""
        m_sSender = ""
        m_sSenderName = ""
        m_sRecipient = ""
        m_sRecipientName = ""
        m_sServer = ""
        m_iPort = -1
        m_iTimeOut = 30

        CloseCon()
        tcpClient = New System.Net.Sockets.TcpClient

        m_colCC = New Collection
        m_colCC_OK = New Collection
    End Sub

    Private Function ExtendedASCIIEncode(ByVal strMsg As String, ByRef arrByte() As Byte) As Boolean
        Dim i As Integer

        Try
            ReDim arrByte(strMsg.Length - 1)
            For i = 0 To strMsg.Length - 1
                arrByte(i) = CByte(Asc(strMsg.Substring(i, 1)))
            Next i

            ExtendedASCIIEncode = True
        Catch ex As Exception
            If i > 0 Then
                ReDim Preserve arrByte(i - 1)
            End If
            ExtendedASCIIEncode = False
        End Try
    End Function

    Private Sub SendText(ByVal strMsg As String)
        Dim sendBytes As [Byte]()

        If Not ExtendedASCIIEncode(strMsg, sendBytes) Then
            Err.Raise(vbObjectError + 1, "SendText", "Error en el Byte-Array!")
            Exit Sub
        End If

        networkStream.Write(sendBytes, 0, sendBytes.Length)
    End Sub

    Private Function GetResponse() As String
        Dim Start As Double
        Dim Tmr As Double
        Dim bytes() As Byte

        Start = Now.TimeOfDay.TotalSeconds

        ReDim bytes(tcpClient.ReceiveBufferSize)

        While Not networkStream.DataAvailable

            Tmr = Now.TimeOfDay.TotalSeconds - Start

            Application.DoEvents()

            If Tmr > m_iTimeOut Then
                GetResponse = "TIMEOUT!"
                Exit Function
            End If
        End While

        If networkStream.DataAvailable Then
            networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
            GetResponse = Encoding.ASCII.GetString(bytes)
        Else
            GetResponse = "TIMEOUT!"
        End If
    End Function

    Private Sub CloseCon()
        If Not tcpClient Is Nothing Then
            tcpClient.Close()
        End If
        tcpClient = Nothing
    End Sub

    Public Sub New()
        Init()
    End Sub

    Public Sub Dispose()
        On Error Resume Next
        CloseCon()
        If Not m_colCC Is Nothing Then
            While m_colCC.Count > 0
                m_colCC.Remove(1)
            End While
        End If
        If Not m_colCC_OK Is Nothing Then
            While m_colCC_OK.Count > 0
                m_colCC_OK.Remove(1)
            End While
        End If

        m_colCC = Nothing
        m_colCC_OK = Nothing
    End Sub

    Public Sub Clear()
        Init()
    End Sub

    Public Function Add_cc(ByVal strCC_EMail As String) As Boolean
        Dim objCC As TRecipient
        Try
            objCC = New TRecipient
            objCC.strEMail = strCC_EMail
            objCC.strName = ""
            objCC.bBlind = False

            m_colCC.Add(objCC)

            objCC = Nothing
            Add_cc = True
        Catch
            Add_cc = False
            objCC = Nothing
        End Try
    End Function

    Public Function Add_cc(ByVal strCC_EMail As String, ByVal strCC_Name As String) As Boolean
        Dim objCC As TRecipient
        Try
            objCC = New TRecipient
            objCC.strEMail = strCC_EMail
            objCC.strName = strCC_Name
            objCC.bBlind = False

            m_colCC.Add(objCC)

            objCC = Nothing
            Add_cc = True
        Catch
            Add_cc = False
            objCC = Nothing
        End Try
    End Function

    Public Function Add_Bcc(ByVal strCC_EMail As String) As Boolean
        Dim objCC As TRecipient
        Try
            objCC = New TRecipient
            objCC.strEMail = strCC_EMail
            objCC.strName = ""
            objCC.bBlind = True

            m_colCC.Add(objCC)

            objCC = Nothing
            Add_Bcc = True
        Catch
            Add_Bcc = False
            objCC = Nothing
        End Try
    End Function

    Public Function Add_Bcc(ByVal strCC_EMail As String, ByVal strCC_Name As String) As Boolean
        Dim objCC As TRecipient
        Try
            objCC = New TRecipient
            objCC.strEMail = strCC_EMail
            objCC.strName = strCC_Name
            objCC.bBlind = True

            m_colCC.Add(objCC)

            objCC = Nothing
            Add_Bcc = True
        Catch
            Add_Bcc = False
            objCC = Nothing
        End Try
    End Function

    Public Function Send() As String
        Dim sResponseCode As String
        Dim sResponse As String
        Dim strMsg As String
        Dim sRegister As String
        Dim iCnt As Long
        Dim s As String
        Dim sTmp As String
        Dim bOK As Boolean
        Dim objCC As TRecipient

        Try
            Send = "OK"

            If m_sServer = "" Or m_iPort < 0 Then
                Send = "Tiene que inicializar el puerto del servidor para poder enviar mensajes"
                Exit Function
            End If

            tcpClient.Connect(m_sServer, m_iPort)
            networkStream = tcpClient.GetStream()

            sResponse = GetResponse()
            sResponseCode = Left(sResponse, 3)
            If sResponseCode <> "220" Then
                CloseCon()
                Send = sResponse
                Exit Function
            End If

            SendText("HELO " & m_sServer & vbCrLf)

            sResponse = GetResponse()
            sResponseCode = Left(sResponse, 3)
            If sResponseCode <> "250" Then
                CloseCon()
                Send = sResponse
                Exit Function
            End If

            If m_sUser = "" Then
                m_sUser = m_sSender
            End If
            SendText("MAIL FROM: " & m_sUser & vbCrLf)

            sResponse = GetResponse()
            sResponseCode = Left(sResponse, 3)
            If sResponseCode <> "250" Then
                CloseCon()
                Send = sResponse
                Exit Function
            End If

            SendText("RCPT TO: " & m_sRecipient & vbCrLf)

            sResponse = GetResponse()
            sResponseCode = Left(sResponse, 3)
            If sResponseCode <> "250" Then
                CloseCon()
                Send = sResponse
                Exit Function
            End If

            For Each objCC In m_colCC
                SendText("RCPT TO: " & objCC.strEMail & vbCrLf)

                sResponse = GetResponse()
                sResponseCode = Left(sResponse, 3)
                Select Case sResponseCode
                    Case "550"
                        '// Nada
                    Case "250"
                        m_colCC_OK.Add(objCC)
                    Case Else
                        CloseCon()
                        Send = sResponse
                        Exit Function
                End Select
            Next

            SendText("DATA" & vbCrLf)

            sResponse = GetResponse()
            sResponseCode = Left(sResponse, 3)
            If sResponseCode <> "354" Then
                CloseCon()
                Send = sResponse
                Exit Function
            End If

            strMsg = "Date: "
            strMsg = strMsg & Format(Now, "ddd, d. MMM yyyy ")
            strMsg = strMsg & Format(Now, "Long Time")
            SendText(strMsg & vbCrLf)

            If m_sRecipientName <> "" Then
                SendText("To: " & m_sRecipientName & " <" & m_sRecipient & ">" & vbCrLf)
            Else
                SendText("To: " & m_sRecipient & vbCrLf)
            End If

            If iCnt < 0 Then
                SendText("Cc: office@ngs.at" & vbCrLf)
            End If

            For Each objCC In m_colCC_OK
                If Not objCC.bBlind Then
                    If objCC.strName <> "" Then
                        SendText("Cc: " & objCC.strName & " <" & objCC.strEMail & ">" & vbCrLf)
                    Else
                        SendText("Cc: " & objCC.strEMail & vbCrLf)
                    End If
                End If
            Next

            If m_sSenderName <> "" Then
                SendText("From: " & m_sSenderName & " <" & m_sSender & ">" & vbCrLf)
            Else
                SendText("From: " & m_sSender & vbCrLf)
            End If

            SendText("Reply To: " & m_sSender & vbCrLf)
            SendText("Subject: " & m_sSubject & vbCrLf)
            SendText(vbCrLf & m_sBody & vbCrLf)
            SendText("." & vbCrLf)

            sResponse = GetResponse()

            SendText("QUIT" & vbCrLf)
            CloseCon()
        Catch ex As Exception
            Send = ex.ToString
        End Try
    End Function
End Class

'Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'    Dim xx As SMTPSend.cSMTP = New SMTPSend.cSMTP()
'    Dim yy As String

'    xx.Sender = "rsandoval@ceo-system.com"
'    xx.SenderName = "Rodrigo Sandoval"
'    xx.Server = "ceo-system.com"
'    xx.Subject = "Test"
'    xx.Body = "Test Test Test Test Test"
'    xx.Recipient = "rodrigo_sandoval_v@msn.com"
'    xx.RecipientName = "RSV"
'    xx.Port = 25

'    yy = xx.Send()
'    MsgBox(yy)
'End Sub

17:41 | 评论 (1)

DataGrid输出到Excel并进行格式化处理

在我们把DataGrid上的数据导入到Excel的时候,如果遇到比较长的数字字符串,比如身份证号码,就会在Excel里当成数字看待,并转换成科学计数法的格式,造成数据的丢失,下面这个方法就解决了这个问题,并示例如何进行其它的格式化。

查看例子

OutPutExcel.aspx

<%@ Page language="c#" Codebehind="OutPutExcel.aspx.cs" AutoEventWireup="false" Inherits="eMeng.Exam.OutPutExcel" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>OutPutExcel</title> </HEAD> <body> <form id="Form1" method="post" runat="server"> <asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid> <asp:Button id="Button1" runat="server" Text="输出到Excel"></asp:Button> </form> </body> </HTML>

OutPutExcel.aspx.cs

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace eMeng.Exam { /// <summary> /// OutPutExcel 的摘要说明。 /// </summary> public class OutPutExcel : System.Web.UI.Page { protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.DataGrid DataGrid1; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 DataGrid1.DataSource=CreateDataSource(); DataGrid1.DataBind(); } /// <summary> /// 创建数据源 /// </summary> /// <returns>DataView</returns> ICollection CreateDataSource() { DataTable dt = new DataTable(); DataRow dr; dt.Columns.Add(new DataColumn("身份证号码", typeof(string))); dt.Columns.Add(new DataColumn("图书单价",typeof(decimal))); dt.Columns.Add(new DataColumn("购买数量",typeof(Int32))); dt.Columns.Add(new DataColumn("总价格",typeof(decimal))); for (int i = 0; i < 30; i++) { dr = dt.NewRow(); dr[0] = "123456789123456789"; dr[1] = 100 * i /3.0; dr[2] = i + 5; dr[3] = (decimal)dr[1] * (Int32)dr[2]; dt.Rows.Add(dr); } DataView dv = new DataView(dt); return dv; } /// <summary> /// 输出到Excel /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button1_Click(object sender, System.EventArgs e) { Response.Clear(); Response.Buffer= true; Response.Charset="GB2312"; Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls"); Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文 Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 this.EnableViewState = false; System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true); System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); this.DataGrid1.RenderControl(oHtmlTextWriter); Response.Write(oStringWriter.ToString()); Response.End(); } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Button1.Click += new System.EventHandler(this.Button1_Click); this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { e.Item.Cells[0].Attributes.Add("style","vnd.ms-excel.numberformat:@"); e.Item.Cells[3].Attributes.Add("style","vnd.ms-excel.numberformat:¥#,###.00"); } } } }

17:38 | 评论 (0)

在.NET中利用XMLHTTP下载文件

利用XMLHTTP下载文件,和以前的方法一样,先添加引用-COM-Microsoft Xml 3.0,然后在代码开始处写:

using MSXML2;

下面就是主要的代码:

private void Page_Load(object sender, System.EventArgs e) { string Url = "http://dotnet.aspx.cc/Images/logoSite.gif"; string StringFileName = Url.Substring(Url.LastIndexOf("/") + 1); string StringFilePath = Request.PhysicalApplicationPath; if(!StringFilePath.EndsWith("/")) StringFilePath += "/"; MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass(); _xmlhttp.open("GET",Url,false,null,null); _xmlhttp.send(""); if( _xmlhttp.readyState == 4 ) { if(System.IO.File.Exists(StringFilePath + StringFileName)) System.IO.File.Delete(StringFilePath + StringFileName); System.IO.FileStream fs = new System.IO.FileStream(StringFilePath + StringFileName, System.IO.FileMode.CreateNew); System.IO.BinaryWriter w = new System.IO.BinaryWriter(fs); w.Write((byte[])_xmlhttp.responseBody); w.Close(); fs.Close(); Response.Write ("文件已经得到。<br><a href='" + Request.ApplicationPath + StringFileName +"' target='_blank'>"); Response.Write ("查看" + StringFileName + "</a>"); } else Response.Write (_xmlhttp.statusText); Response.End(); }

17:37 | 评论 (0)

很久没有技术性文章了,今天转发几个

很久没有技术性文章了,今天转发几个

17:36 | 评论 (0)

2005年12月21日 #

凯越车提车要领

1. 看发动机的生产日期,具体看 机架和合格证。日子离提货期要近一点,是否原装,看机架有没有韩文。
2. 摸一下发动机,是否热,热说明JS已经把你车预热了,不好,最好看着他直接从车库拿出来。
3. 点火,注意不要踩油门,让发动机怠速运行。注意听发动机声音,不要有“哒哒”声,有声音说明接气门有问题,最好声音低沉均匀。
4. 看一下现有里程数,不能超过5公里。下车,让发动机怠速跑着3-5分钟,看车子外表。
5. 车轮要求黄色保护线还在,有毛刺,干净,没有跑过痕迹。
6. 看排气管,应该冒白烟。冒黑烟或者青烟,说明发动机不好,或者机油有问题了。
7. 看外表最好明亮的太阳底下看,顺序 干――洗过――干,看2次。先看4个角,有否擦伤,四个角运输过程最容易擦伤。再四面看,有没有补漆痕迹,凹凸不平等。再从车两边沿车直线看车子,这样有凹凸可以看清楚。洗完再仔细看一边。
8. 接着可以看内饰了,敲几下仪表盘上面,注意有没有缝,试试空调,冷热。天窗开闭,皮饰,车窗上下,门关合,行李箱关闭,密封性,噪音情况,关门声音。
9. 现在上车上看怠速,凯越一般怠速都800-1200,尽量挑怠速低,750更好。
10. 找专业驾驶员朋友到路上试车,注意看车子有没有跑偏。即松方向盘跑,跑偏15度以内。偏左绝对不行,偏右,看路面是否倾斜,一般路中间高,边上(右边)低,所以偏右必须15度以内。
11. 速度50码,刹车,试ABS是否作用。刹车距离是否可接收。点刹车,手轻抚方向盘(保护就行),看方向盘有没有偏,后轮有没有跑偏的感觉。

注:需配备的附件:
l 膜,排名:龙膜,3M,雷朋,三固。一般3M和雷朋假的太多。前面膜800,两边及后面800。要质保书。
l 挡泥板60-80元
l 地毯正宗别克150-200元
1、 提车,提车之前不要办理任何手续,可以只简单签一个合同。看到新车以后不要急于上车打开发动机。问JS多要点汽油。因为试车的时候JS往往为了节省成本,只给一点点汽油。这样对新车很不好,因为挑的时候往往点火,熄火好几次,油少容易对汽油泵造成损害。 
  点火之前对档位认真检查,恕我直言,现在买车的,往往都是新手,对汽车没什么了解。在转动钥匙到点火位置以前要在ACC停留数秒等待油泵给发动机加点火油。点火以后不要给油试发动机。可以先下车检查外观。因为刚出厂的新车没有磨合,甚至没怎么让发动机运转过。机械部分可能会有没有磨合的毛刺缺陷。这时候就猛给油试发动机容易造成走和磨损。不利于磨合。 
 2、 先检查外观,外观检查很重要,因为车和你在一起号几年,新车外观上要是有问题就体现不出新来了。我的几个朋友买的新车上面都有小伤。检查时蹲下让眼睛与检查平面在一个平面上。仔细观察看看有没有小坑。打开车门推拉几个角度让光线以不同的角度照射来检查板金质量。检查车身各个部分接缝是否均匀。每个车门,机器盖,后箱都打开关闭几次检查机构运转。观察各玻璃,大灯,塑料件有没有裂纹。按一下看看有没有结合不好的吱吱声。检查轮胎,看看各胎颜色款式是否一样。 
 3、 检查车门。依次打开每个车门观察是否有下垂现象。将门慢慢打开到推不动为止,感觉限位开关是否起作用有没有异响。轻轻的关上车门(注意一定是轻轻的)听关门的声音是否有尖锐的撞击声,四个门子是否声音相同或者前面两个相同,后面两个相同。大小一样的相同。注意一定是轻轻的,不然听不出来细小的撞击声。有撞击声说明阻泥和密封不好。高级一点的车的限位开关有自回功能,就是关闭到一定位置能自己关闭。挑选的时候关门时手一直轻放在车门上直到关闭。这样检查每一个车门的回复力。以前那种打夏利摔门子的粗鲁做法应该改变了。你已经要变成有车的人了,要注意爱护自己的车。检查车身外部其它设备。包括反光镜能不能折叠,防撞条粘贴,安装能不能平整。挡泥板安装是不是牢固。 
 4 检查灯光和电器部分。新车新手上路本来就比较危险,如果灯光有问题就更雪上加霜。一次打开大灯,调整亮度,远光,雾灯,组合尾灯,双闪灯。刹车灯,高位刹车灯,到车灯。检查亮度以及闪烁是否是一个频率。检查音响,将声音开大,听有没有因为震动而产生的共振或者擦圈的声音。喷一些玻璃水,并检查雨刷器工作是否正常。注意雨刷气开始位置和终止位置是否一样。检查电动窗。首先将所有的车窗关闭,然后一起落下检查四个车窗是否同时工作,之后再一起将车窗升起,检查是否同步。逐一检查每一个车窗。升起,落下,注意听有没有不顺畅的声音,松动的声音或者共振的声音。检查电动反光镜。检查空调和暖气工作(发动机工作时)保证出风口没有风扇振动的嗒嗒声。暖气是否暖和,冷风是否凉爽。特别是冷风开启时继电器吸合的声音是不是很大,对发动机待速影响如何。出风位置的试验,看看各方向位置是否正确。试验行车电脑的所有功能。 
 5 检查内饰,打开所有车门,检查内饰,看仪表台上下结合是否稳妥,接缝是否均匀。每个接缝位置都用手压按一下,确保不能听见结合不好的声音。表台上所有的按钮,拉杆都要仔细检查,看看是不是安装妥善。手掌轻轻拍打中控台不应该听到由于安装不好而产生的松旷震动声音。门板内饰板的检查。在门板与内饰板之间有卡子连接,主要检查这个。手指拉主内饰板边缘轻轻往外拉。看卡子是否安装好了。手掌轻轻拍打门板内饰板不应该听到由于安装不好而产生的松旷震动声音。同样的方法检查A,B,C柱上的内饰板。检查地胶粘贴是否平整。检查座椅,折叠推拉,电动功能是否正常。电机工作是否平稳有没有异响。用力往下坐一下,前后晃悠一下,听听有没有松旷的声音。打开后备箱检查里面是否平整干净。检查工具是否齐全,备胎是否正常,安装是否稳妥。很重要的是检查密封条。必须仔细的把各个门窗密封条检查。用手顺着密封条方向滑动施加一定的压力,感觉密封条是否均匀,粘贴是否完整。每一块手感是否一样,按在上面是否有弹性。观察密封条在门槽里是否安装正确,有没有较劲。轻轻关闭车门,听声音,沉重感的说明密封很好。 
 6 好,经过这些检查你的车子发动机应该已经达到正常迨速。打开机器盖子,观看里面是否干净。听发动机迨速声音。整体感是否很好,有没有凌乱细碎的感觉。用大拇指按住机器机油盖子塑料,用力压住,感受发动机震动传到你的胳膊上,是否平稳,是否有固定的频率,确保不要有凌乱的震动。转动油门拉线滑轮。(注意温度)听到发动机加速运转的声音是否平滑,有没有凌乱的感觉。加速是否与你的动作灵敏,同步。 
 7 上路检查,一般4S店都会让你把车开出去试试。这样你可以检查隔音,发动机情况,变速箱,以及减震,刹车。首先,你不能开的过于粗暴,因为汽车处于走和磨合。加速要循序渐进。换挡在2000转左右。速度不宜高于120KM/h。注意聆听发动机的声音,感觉隔音如何,迨速坐在车里是不是平稳。发动机运转声音是否有规律,还是比较凌乱。加速响应是否快捷。特别注意当低速换挡加油的时候发动机的声音,也就是说当发动机比较吃力的时候是什么状态。应该是平稳噪音沉闷但是不凌乱。凌乱的绝对不要。 
  起步加速慢慢的松开离合,感觉半联动点,看看这是是否平稳,如果有磕磕绊绊的感觉,那就是离合器压盘安装问题。(当然这种判断需要一定的驾驶经验)感觉离合器调整是否过高(太高容易熄火,太低容易磨损离合片)换档感觉是否顺畅,降档感觉是否同步得好。把手放在挡杆上感觉是否震动。震动是否有一定的规律,还是比较凌乱。停车,检查倒挡进入是否平顺,有没有冲击声。 
  找一个缓台,慢慢开上开下一次,感觉避震和隔音如何。而且还要注意听车里的内饰是不是有振动的响声。如果有,说明门,或者窗,或者座椅,或者仪表台,或者A,B,C柱饰板,或者后窗台有安装问题。检查方向,匀速平面行驶放开方向盘,看车是否跑偏。(注意安全)检查助力转向。低速是否轻松,高速能不能沉稳。转向是否到位,如果转到一个角度,一松手又回来一点,那就是调校问题。聆听转向机是否有噪音。 
 8 最后,当你选定了一辆车,你要求JS给你洗车,洗干净以后再次检查板金喷漆,因为脏车不容易看出来。干净了以后才看得清楚。这点非常非常重要,我有几个同学都是买了以后发现车上有伤。 
  至此你可以决定一辆新车了,当然事事无绝对。有可能以上的一些检查下来有问题,那你就要做一个取舍了。 

祝大家购车愉快

18:44 | 评论 (0)

2005年11月30日 #

做蛋糕咯

21:23 | 评论 (1)

车子又坏了,修了一把

打火打不着了,换了个马达

顺便换掉了水箱

另外把坏掉的大灯修好了。

21:21 | 评论 (0)

2005年11月20日 #

今天在杨浦大桥上目睹一起车祸现场。

边开车边拍了几张照片

12:32 | 评论 (4)

2005年10月5日 #

将20块钱包月在W800上进行到底

拔号时注意,在W800中,如果拨号*99***1#是用CMNET方式连接,一定要用*99***2#来连接,否则将按GPRS流量收费,后果自负哦
此时电脑显示连接成功,速度为115KBPS,在这个情况下,通过设置代理地址栏中输入10.0.0.172,后面的端口中填80可以上QQ,但在IE设置代理却已经无法上与联网,每开网页就会变成下载,不要急,接下来还有简单的一步,你就可以放心使用了。全国最专业的索尼爱立信手机交流区O;N&d2yI3D/Qdn
首先修改电脑的注册表sebbs.it168.comN0u,s:{        y
A:打开开始菜单->运行,输入regedit打开注册表编辑器'FA1r#n
V@

B:在注册表中找到以下项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0
在5.0中新建项User Agent,然后在新建的User Agent项中分别以Compatible、Platform、Version为名称新建三个字符串值
修改这三个字符串及原来的默认字符(双击字符串值即可)串值为任意字符串,如aad,ffg,gft等
关掉注册表编辑器
修改电脑的IE 浏览器*W[Tk2GdK'w
A:打开你的IE浏览器,点选:工具->internet选项->连接,在"拨号和虚拟专用网络设置"一栏中找到"GPRS Managed Connection"并点选.再点选"设置"
在复选栏中选择"对此连接使用代理服务器(这些设置不会应用到其它连接)"全国最专业的索尼爱立信手机交流区}}m
l&L'fte

C:选高级选项
复选"对所有协议使用相同的代理服务器"IT168索爱论坛"Q2GS;gF        IQ'^k
E:在地址栏中输入10.0.0.172,后面的端口中填80
OK ,点确定,上网玩去吧。
0t

12:09 | 评论 (1)

2005年9月29日 #

20块钱包月用K750连电脑上网方法

http://sebbs.it168.com/viewthread.php?tid=3082&extra=page%3D1

14:40 | 评论 (0)

2005年9月24日 #

重装机器,安装SQL Server 2000失败,找到一片文章恢复成功!

如何手动删除 SQL Server 2000 默认实例、命名实例或虚拟实例

文章编号 : 290991
最后修改 : 2005年3月17日
修订 : 13.0

概要

本文中的步骤介绍如何为重新安装 SQL Server 程序的系统做准备工作。

删除 Microsoft SQL Server 2000 的正确方法(Microsoft 建议采用的方法)是,使用 Microsoft SQL Server 2000 安装程序中的卸载选项。不过,如果安装失败,可能无法使用卸载选项。如果无法使用卸载选项,则在尝试重新安装 SQL Server 程序前,必须将系统恢复到一个干净、稳定的安装点。

注意:Microsoft SQL Server 2000(64 位)安装程序使用 Windows 安装程序,将 SQL Server 功能的安装完全集成到一个功能树中。最小和典型安装模式已不再采用。默认情况下,安装程序显示功能树,并选定所有可用的功能。管理员可通过选择功能树中的项目和更改安装路径来自定义安装。有关更多信息,请参阅 SQL Server 2000(64 位)文档。

删除 Microsoft SQL Server 2000 前应考虑的事项

重要警告:您可能希望按照当前的状态保存某些数据库。您可能还希望保存对默认数据库所做的更改。如果遇到以上任何一种情况,则在按照本文中的步骤进行操作前,应确保留有已知完好的数据备份,或将所有数据和日志文件复制到 MSSQL 文件夹之外的其他文件夹中,因为在下面的操作中您必须删除 MSSQL 文件夹。

必须保存的文件包括由 Microsoft SQL Server 2000 安装的以下数据库文件:
Distmdl.*
Master.*
Mastlog.*
Model.*
Modellog.*
Msdbdata.*
Msdblog.*
Northwnd.*(可选安装)
Pubs.*
Pubs_log.*
Tempdb.*
Templog.*

警告:如果安装的 SQL Server 还与 Microsoft SQL Server Reporting Services 一起使用,请确保还保存或重命名了以下文件夹和子文件夹:
Default path\Reporting Services
Default path\MSSQL\Reporting Services
Default path\SQL Server Instance name\Reporting Services
Default path\80\Tools\Report Designer
注意Default path 指的是 %ProgramFiles%\Microsoft SQL Server

Microsoft 还建议:
对于配置为群集系统的 Microsoft SQL Server 2000,应确保没有任何其他群集资源与要删除的 Microsoft SQL Server 2000 存在依赖关系。

有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
835185 (http://support.microsoft.com/kb/835185/) SQL Server 中的故障转移群集资源依存关系
停止 Microsoft SQL Server 2000,因为活动连接可能会导致卸载过程无法成功完成。
关闭其他节点上的所有 Microsoft SQL Server 2000 客户机或管理工具。
使用 Microsoft SQL Server 2000 服务帐户或具有等效权限的帐户(也就是 Local Administrator 组的成员帐户)登录到服务器。如果将 SQL Server 配置为群集系统,则您使用的帐户在所有群集节点上都必须是 Local Administrators 组的成员。

删除 SQL Server 的步骤

重要说明:本文包含有关修改注册表的信息。修改注册表之前,一定要先进行备份,并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和编辑注册表的信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256986 (http://support.microsoft.com/kb/256986/) Microsoft Windows 注册表说明

警告:注册表编辑器使用不当可能导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。
根据您的特定环境,您可以采用以下的一个或多个步骤。

成功删除了 SQL Server 后,您不需要再继续执行此列表中的其余步骤。

1. 对于虚拟服务器,请使用安装光盘上的 Microsoft SQL Server 2000 安装程序,然后单击“卸载”选项。SQL Server 联机手册中的“How to uninstall an existing installation of SQL Server (Setup)”(如何卸载现有的 SQL Server 安装(安装程序))主题对此进行了说明。
2. 对于非群集(独立)实例,可以执行步骤 1,也可打开控制面板中的添加/删除程序小程序。
3. 在控制面板中,打开添加/删除程序小程序。
4. 运行 Regedt32,然后找到以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Uninstall 项下,找到要删除的 Microsoft SQL Server 2000 实例的产品代码。

在任务栏上,单击开始,然后单击运行。在运行对话框中,复制并粘贴以下命令,或自己键入以下命令:

C:\WINNT\IsUninst.exe -f"C:\Program Files\Microsoft SQL Server\MSSQL$Server1\Uninst.is" -c"C:\Program Files\Microsoft SQL Server\MSSQL$Server1\sqlsun.dll" -Mssql.miff i=I1

如果上述步骤无效,则可以按照 删除 SQL Server 的所有已知实例 一节中的步骤手动删除 Microsoft SQL Server 2000。

注意:此时并不是要完全删除 SQL Server 2000。执行这些步骤是为了将系统恢复到可以成功进行安装的状态,这样,您就可以在安装完成后再将恢复的 Microsoft SQL Server 2000 安装删除。

5. 找到安装的 Data 文件夹,如果需要保存这些数据,则重命名该文件夹。否则,请删除 Data 文件夹。Microsoft 建议保留 Data 文件夹,这就相当于保留了 MDF 和 LDF 格式的数据库平面文件备份。如果重命名 Data 文件夹,只要您在重新安装时使用相同的名称、路径和 IP 地址,就可以将现有数据恢复到与使 SQL Server 脱机时完全相同的状态和条件。


注意:如果这是 SQL Server 2000 的群集实例,请为群集中的每个节点重复执行这些步骤。

删除 SQL Server 的特定实例

若要删除 SQL Server 的特定实例,请按照下列步骤操作:
1. 找到并删除 %drive%:\Program Files\Microsoft SQL Server\MSSQL\Binn 文件夹,其中 %drive% 是要删除的 SQL Server 实例的位置。
2. 找到以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer

注意:如果要删除默认实例,则必须删除除 Client 项以外的所有项。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server

必须使用 Regedt32.exe 来编辑要删除的实例的 InstalledInstances 值。默认实例的显示名称为 MSSQLSERVER,而命名实例的显示名称则为给该实例指定的名称。

注意:不能使用 Regedit.exe 编辑该值;您必须使用 Regedt32.exe。


注意:如果这是 SQL Server 2000 的群集实例,请为群集中的每个节点重复执行这些步骤。

删除 SQL Server 的所有已知实例

若要删除 SQL Server 的所有已知实例,请按照下列步骤操作:
1. 找到并删除 %drive%:\Program Files\Microsoft SQL Server\MSSQL\Binn 文件夹。
2. 找到并删除以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server


3. 找到并删除以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServerADHelper
4. 步骤 3 中的三个注册表项对应于 Microsoft SQL Server 2000 的默认实例。命名实例对应的注册表项与步骤 3 中列出的注册表项类似,但后面带有 $instance_name,因为 instance_name 是为特定实例指定的名称。找到要删除的实例所对应的注册表项后,选择并删除它们。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer$InstanceName
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT$InstanceName
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServerADHelper

5. 如果将要删除的 SQL Server 实例配置为群集系统,请删除群集管理器中该实例的所有群集资源。

注意:仅删除 SQL Server 资源。
6. 重新安装 Microsoft SQL Server 2000 并使用相同的名称和 IP 地址。
7. 运行安装程序并使用卸载选项,消除由于安装失败而遗留的任何配置问题或错误。


注意:如果这是 SQL Server 2000 的群集实例,请为群集中的每个节点重复执行这些步骤。

删除 SQL Server 的默认实例

若要删除 SQL Server 的默认实例,请找到并删除以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT

删除 SQL Server 的命名实例

若要删除 SQL Server 的命名实例,请按照下列步骤操作:
1. 找到并删除某个命名实例对应的以下注册表项,其中 InstanceName 是要删除的实例的名称。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer$InstanceName
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT$InstanceName
2. 如果将要删除的 SQL Server 实例配置为群集系统,请删除群集管理器中该 SQL Server 实例的所有群集资源。

注意:仅删除 SQL Server 资源。
3. 重新安装 Microsoft SQL Server 2000 并使用相同的名称和 IP 地址。
4. 运行安装程序并使用卸载选项,消除由于安装失败而遗留的任何配置问题或错误。


注意:如果这是 SQL Server 2000 的群集实例,请为群集中的每个节点重复执行这些步骤。

如何包含全文检索删除

若要包含全文检索删除,请按照下列步骤操作:
1. 删除以下注册表项。只有在使用 删除 SQL Server 的所有已知实例 一节中的步骤时,才应使用本节中的步骤:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSCNTRS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSEARCH
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSGATHERER
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSGTHRSVC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSINDEX
注意:如果删除这些注册表项,就会禁用 Microsoft Search 服务 (MSSearch)。如果以下应用程序在同一台计算机上运行,此操作可能会对它们产生影响:
Microsoft Exchange Server
Microsoft SharePoint Portal Server
Microsoft Site Server
Microsoft Commerce Server
Microsoft Small Business Server
2. 如果将要删除的 SQL Server 实例配置为群集系统,请删除群集管理器中该 SQL Server 实例的所有群集资源。

注意:仅删除 SQL Server 资源。
3. 重新安装 Microsoft SQL Server 2000 并使用相同的名称和 IP 地址。
如果不删除 MSSearch,重新安装 SQL Server 2000 时可能会出现以下错误信息:


[sqlclusterSetup.cpp:464]:2 (0x2):The system cannot find the file specified.Problem in the resource name SQL Server Fulltext.

[clushelp.cpp:1238]:5007 (0x138f):The cluster resource could not be found.

[sqlclusterSetup.cpp:1059]:5007 (0x138f):The cluster resource could not be found.


如果出现这些错误信息,请重新启动服务器,按步骤操作将 MSSearch 删除,然后再次尝试进行安装。

注意:由于此前未完成删除过程,因此如果您担心能否在以后删除实例,可以执行以下步骤来验证是否解决了可能会导致此问题再次出现的所有问题。如果只是想确认此特定删除已完成,则不必执行这一步骤,因为该步骤只是检查自动删除过程是否有效。运行 SQL Server 安装程序,并使用“卸载”选项立即验证删除过程,而不是等到必须具备此功能时再进行验证。如果此步骤失败,则必须继续进行检查,确定导致失败的原因,并解决该问题。

运行安装程序,然后使用卸载选项,确认没有由于删除失败而遗留的配置问题或错误。

注意:在某些情况下,可能不会删除文件夹 %drive%:"\Program Files\Microsoft SQL Server\80,此时您必须手动将其删除。

在安装 SQL Server 2000 时,可能会出现以下错误信息:

A previous program installation created pending file operations on the installation machine.You must restart the computer before running setup
如果出现此错误信息,请重新启动服务器,然后再次尝试进行安装。如果在重新启动服务器后,再次出现该错误信息,那么您要删除的文件可能处于只读状态。

请按照下列步骤操作,检查这些文件是否处于只读状态:
1. 找到以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
2. 记下文件名。
3. 确保这些文件未设置只读属性。
4. 再次重新启动服务器。

重新安装 SQL Server 前删除临时文件夹中的内容

将临时文件夹中的内容全部删除,这里的临时文件夹既包括 System Temp 文件夹,也包括安装用户的 Temp 文件夹。要确定用户临时文件夹的位置,请在命令提示符下输入以下命令:
C:\Documents and Settings\username>set t
结果应当包含以下内容:
TEMP=C:\DOCUME~1\username\LOCALS~1\Temp
TMP=C:\DOCUME~1\username\LOCALS~1\Temp
还可能会列出其他项。典型路径如下:
C:\Documents and Settings\username\Local Settings\Temp
System Temp 的典型路径为 %systemroot%\temp

参考

如果仍出现未完成文件操作错误信息,请参见 Microsoft 知识库中的以下文章:
312995 (http://support.microsoft.com/kb/312995/) SQL Server 2000 安装失败并给出“...previous program installation...”错误信息

这篇文章中的信息适用于:
Microsoft SQL Server 2000 标准版
关键字: 
kbhowtomaster KB290991
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、

20:35 | 评论 (0)

2005年9月3日 #

发动机过热的应急方法

提醒广大车主:如果在普通公路上发动机出现了过热,应该尽快地降低车速,把汽车驶到树阴下,或驶到相对比较凉快的地方,把汽车停下来。打开发动机罩盖,让发动机怠速运转,等待发动机温度逐渐恢复正常。在发动机水温恢复正常之后,将发动机熄火。然后再等待一段时间,直到发动机的水温充分地下降了之后,再检查发动机的冷却水量。这时发动机的冷却水量大都严重不足。按照规定量把冷却水补足之后,再检查一下冷却系统,确认没有其他故障之后,可以启动发动机,继续行驶。
    
  如果在高速公路上出现了发动机过热,必须立刻把暖风全部打开并打开车窗,这时车厢内将热得像蒸笼一样。由于有暖风帮助冷却水散热,能使冷却水温大幅度地下降。这样可以持续开车,就近找到高速公路的出口,把汽车驶到安全的场所停下来。接下来,只要按照上述的方法,使发动机的温度降下来就行。

18:50 | 评论 (0)

2005年9月1日 #

关于索爱T618通话清单的独特技巧

第一步,确认通话清单是满的(有30个号码),并且打进,打出和未接电话这三种都有。

  第二步,选择任意一个号码然后更多->拨叫前编辑。

  第三步,用C删掉所有的数字,然后按住0直到出现+的符号,呼叫。  

  手机此时开始呼叫,然后过一会自动断开。此时,如果一切都对在清单的最下面将会有一条空白记录。

这样做产生的改变:

  1. 呼叫清单的第一个号码不再是默认的最后一个打出电话而是最后一个电话(打进,打出或未接)。

  2. 如果接到几个同一号码的来电,会都显示出来而不是只显示最后一个。

  如果想要去掉这一功能,只需删掉最后一条空白记录就行了。

18:24 | 评论 (0)

2 3 4 5 6 7 >>

请不要发表可能给我们带来伤害的政治言论,谢谢配合