- Excel 2007, 2010 規劃求解, 線性規劃, 運輸問題 需要從 檔案/選項/增益集 執行,勾選 規劃求解選項即可。
- 如果是Excel 2003,則是在工具/增益集 勾選 規劃求解 選項。
2012年9月28日 星期五
Visio畫直線,取消跨線跳線跳轉
自從改用2010後,很多功能找不到,只能慢慢熟悉了,例如在Visio 2010中,要畫直線,一般預設的連接器會自動折線(自動直角),可是我們常有畫直線的需求,其實這個設定就在
設計/連接器/直線 ,或者要取消跨線 或稱為取消跳線 的功能,同樣在 設計/連接器/取消顯示線條跳轉 即可。
2012年9月27日 星期四
圖片縮圖
3002/30025.aspx 負責處理圖片縮圖
' 取得圖型資料及縮圖處理
' FileUpload 的檔案內容存入 Image
Using img_tmp As System.Drawing.Image = System.Drawing.Image.FromFile(fullname)
ac_height = img_tmp.Height
' 實際高度
ac_width = img_tmp.Width
' 實際寬度
' 維持圖檔比例的方式,計算與縮圖 120 * 120 的比例
If ac_width > ac_height Then
fCnt = ac_width / 120.0R
Else
fCnt = ac_height / 120.0R
End If
' 實際圖比縮圖大時才要處理,否則仍為原圖檔尺寸
If fCnt > 1 Then
s_width = CInt((ac_width / fCnt))
' 縮圖寬度
' 縮圖高度
s_height = CInt((ac_height / fCnt))
Else
s_width = ac_width
' 縮圖寬度
' 縮圖高度
s_height = ac_height
End If
' 呼叫 Bitmap 物件的 GetThumbnailImage 方法來建立一個縮圖
Using img_thumb As System.Drawing.Image = img_tmp.GetThumbnailImage(s_width, s_height, Nothing, IntPtr.Zero)
fullname = lb_path.Text & "_thumb\" & fname & ".jpg"
' 縮圖的壓縮比為 75%
Dim eps As New EncoderParameters()
eps.Param(0) = New EncoderParameter(Encoder.Quality, CLng(75))
' 以預設壓縮比儲存 jpeg (75%)
' img_thumb.Save(fullname, System.Drawing.Imaging.ImageFormat.Jpeg);
img_thumb.Save(fullname, GetEncoderInfo("image/jpeg"), eps)
End Using
End Using
-------------------------------------------------------
'網路上找到的資料
using System;
using System.Collections.Specialized;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Configuration;
using Microsoft.Web.UI;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ItemUpdating(object sender, IOrderedDictionary newData, IOrderedDictionary oldData)
{
try
{
FileUpload fileUpload = (FileUpload)((DetailsView)sender).FindControl( "FileUpload ");
//e.Values.
if (fileUpload.HasFile)
{
newData[ "MIME_TYPE "] = Server.HtmlEncode(fileUpload.PostedFile.ContentType);
newData[ "FILESIZE "] = fileUpload.PostedFile.ContentLength;
newData[ "FILENAME "] = Server.HtmlEncode(Path.GetFileName(fileUpload.PostedFile.FileName));
byte[] b = fileUpload.FileBytes;
byte[] bThumb = CreateThumbnail(b);
newData[ "THUMBNAIL "] = bThumb;
newData[ "ASSETFILE "] = b;
return;
}
if(oldData!=null)
{
newData[ "MIME_TYPE "] = oldData[ "MIME_TYPE "];
newData[ "FILESIZE "] = oldData[ "FILESIZE "] ;
newData[ "FILENAME "] = oldData[ "FILENAME "] ;
DictationDataSet ds = new DictationDataSet();
DictationDataSetTableAdapters.DICTATIONTableAdapter da = new DictationDataSetTableAdapters.DICTATIONTableAdapter(); ;
da.Fill(ds.DICTATION);
DataRow[] drs = ds.DICTATION.Select( "ID= " + ((DetailsView)sender).DataKey.Value.ToString());
DataRow dr = drs[0];
newData[ "THUMBNAIL "] = (byte[])dr[ "THUMBNAIL "];
newData[ "ASSETFILE "] = (byte[])dr[ "ASSETFILE "];
}
}
catch (Exception ex)
{
throw ex;
}
}
protected void DetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
ItemUpdating(sender, e.NewValues,e.OldValues);
}
protected void DetailsView_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
ItemUpdating(sender, e.Values,null);
}
static public byte[] CreateThumbnail(byte[] src)
{
try
{
System.Drawing.Image img = System.Drawing.Image.FromStream(new MemoryStream(src));
System.Drawing.Image imgthumb = img.GetThumbnailImage(100, 75, null, new System.IntPtr(0));
MemoryStream thumbstream=new MemoryStream();
imgthumb.Save(thumbstream, ImageFormat.Jpeg);
img.Dispose();
byte[] b=thumbstream.ToArray();
imgthumb.Dispose();
return b;
}
catch (Exception e)
{
}
return null;
}
protected void DetailsView_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
RebindGrid();
}
protected void DetailsView_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
RebindGrid();
}
protected void DetailsView_ItemDeleted(object sender, DetailsViewDeletedEventArgs e)
{
RebindGrid();
}
void RebindGrid()
{
this.GridView.DataBind();
}
protected void GridView_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
this.DetailsView.ChangeMode(DetailsViewMode.Edit);
}
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
FileUpload fileUpload = (FileUpload)((DetailsView)this.DetailsView).FindControl( "FileUpload ");
if (fileUpload.HasFile)
{
HttpRuntimeSection config1 = new HttpRuntimeSection();
int num1 = (config1 != null) ? config1.MaxRequestLength : 0x400000;
args.IsValid = (fileUpload.PostedFile.ContentLength > num1);
}
}
}
-------------------------------------------------------
'網路上找到的資料
'有一个vb的
'生成缩略图
Sub MakeThumbnail(ByVal originalImagePath As String, ByVal thumbnailPath As String, ByVal width As Integer, ByVal height As Integer, ByVal mode As String)
Dim originalImage = System.Drawing.Image.FromFile(originalImagePath)
Dim towidth As Integer = width
Dim toheight As Integer = height
Dim x As Integer = 0
Dim y As Integer = 0
Dim ow As Integer = originalImage.Width
Dim oh As Integer = originalImage.Height
Select Case (mode)
Case "HW " '指定高宽缩放(可能变形)
Case "W " '指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width
Case "H " '指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height
Case "Cut " '指定高宽裁减(不变形)
If (CType(originalImage.Width, Double) / CType(originalImage.Height, Double)) > (CType(towidth, Double) / CType(toheight, Double)) Then
oh = originalImage.Height
ow = originalImage.Height * towidth / toheight
y = 0
x = (originalImage.Width - ow) / 2
Else
ow = originalImage.Width
oh = originalImage.Width * height / towidth
x = 0
y = (originalImage.Height - oh) / 2
End If
End Select
'新建一个bmp图片
Dim bitmap = New System.Drawing.Bitmap(towidth, toheight)
'新建一个画板
Dim g = System.Drawing.Graphics.FromImage(bitmap)
'设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
'设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
'清空画布并以透明背景色填充
g.Clear(System.Drawing.Color.Transparent)
'在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, New System.Drawing.Rectangle(0, 0, towidth, toheight), New System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel)
Try
'以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg)
Catch ex As Exception
Throw ex
Finally
originalImage.Dispose()
bitmap.Dispose()
g.Dispose()
End Try
End Sub
後來網路上又找到呼叫另外軟體來做縮圖的
http://www.dotblogs.com.tw/killysss/archive/2011/06/20/29257.aspx?fid=30793#feedback
' 取得圖型資料及縮圖處理
' FileUpload 的檔案內容存入 Image
Using img_tmp As System.Drawing.Image = System.Drawing.Image.FromFile(fullname)
ac_height = img_tmp.Height
' 實際高度
ac_width = img_tmp.Width
' 實際寬度
' 維持圖檔比例的方式,計算與縮圖 120 * 120 的比例
If ac_width > ac_height Then
fCnt = ac_width / 120.0R
Else
fCnt = ac_height / 120.0R
End If
' 實際圖比縮圖大時才要處理,否則仍為原圖檔尺寸
If fCnt > 1 Then
s_width = CInt((ac_width / fCnt))
' 縮圖寬度
' 縮圖高度
s_height = CInt((ac_height / fCnt))
Else
s_width = ac_width
' 縮圖寬度
' 縮圖高度
s_height = ac_height
End If
' 呼叫 Bitmap 物件的 GetThumbnailImage 方法來建立一個縮圖
Using img_thumb As System.Drawing.Image = img_tmp.GetThumbnailImage(s_width, s_height, Nothing, IntPtr.Zero)
fullname = lb_path.Text & "_thumb\" & fname & ".jpg"
' 縮圖的壓縮比為 75%
Dim eps As New EncoderParameters()
eps.Param(0) = New EncoderParameter(Encoder.Quality, CLng(75))
' 以預設壓縮比儲存 jpeg (75%)
' img_thumb.Save(fullname, System.Drawing.Imaging.ImageFormat.Jpeg);
img_thumb.Save(fullname, GetEncoderInfo("image/jpeg"), eps)
End Using
End Using
-------------------------------------------------------
'網路上找到的資料
using System;
using System.Collections.Specialized;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Configuration;
using Microsoft.Web.UI;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ItemUpdating(object sender, IOrderedDictionary newData, IOrderedDictionary oldData)
{
try
{
FileUpload fileUpload = (FileUpload)((DetailsView)sender).FindControl( "FileUpload ");
//e.Values.
if (fileUpload.HasFile)
{
newData[ "MIME_TYPE "] = Server.HtmlEncode(fileUpload.PostedFile.ContentType);
newData[ "FILESIZE "] = fileUpload.PostedFile.ContentLength;
newData[ "FILENAME "] = Server.HtmlEncode(Path.GetFileName(fileUpload.PostedFile.FileName));
byte[] b = fileUpload.FileBytes;
byte[] bThumb = CreateThumbnail(b);
newData[ "THUMBNAIL "] = bThumb;
newData[ "ASSETFILE "] = b;
return;
}
if(oldData!=null)
{
newData[ "MIME_TYPE "] = oldData[ "MIME_TYPE "];
newData[ "FILESIZE "] = oldData[ "FILESIZE "] ;
newData[ "FILENAME "] = oldData[ "FILENAME "] ;
DictationDataSet ds = new DictationDataSet();
DictationDataSetTableAdapters.DICTATIONTableAdapter da = new DictationDataSetTableAdapters.DICTATIONTableAdapter(); ;
da.Fill(ds.DICTATION);
DataRow[] drs = ds.DICTATION.Select( "ID= " + ((DetailsView)sender).DataKey.Value.ToString());
DataRow dr = drs[0];
newData[ "THUMBNAIL "] = (byte[])dr[ "THUMBNAIL "];
newData[ "ASSETFILE "] = (byte[])dr[ "ASSETFILE "];
}
}
catch (Exception ex)
{
throw ex;
}
}
protected void DetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
ItemUpdating(sender, e.NewValues,e.OldValues);
}
protected void DetailsView_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
ItemUpdating(sender, e.Values,null);
}
static public byte[] CreateThumbnail(byte[] src)
{
try
{
System.Drawing.Image img = System.Drawing.Image.FromStream(new MemoryStream(src));
System.Drawing.Image imgthumb = img.GetThumbnailImage(100, 75, null, new System.IntPtr(0));
MemoryStream thumbstream=new MemoryStream();
imgthumb.Save(thumbstream, ImageFormat.Jpeg);
img.Dispose();
byte[] b=thumbstream.ToArray();
imgthumb.Dispose();
return b;
}
catch (Exception e)
{
}
return null;
}
protected void DetailsView_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
RebindGrid();
}
protected void DetailsView_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
RebindGrid();
}
protected void DetailsView_ItemDeleted(object sender, DetailsViewDeletedEventArgs e)
{
RebindGrid();
}
void RebindGrid()
{
this.GridView.DataBind();
}
protected void GridView_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
this.DetailsView.ChangeMode(DetailsViewMode.Edit);
}
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
FileUpload fileUpload = (FileUpload)((DetailsView)this.DetailsView).FindControl( "FileUpload ");
if (fileUpload.HasFile)
{
HttpRuntimeSection config1 = new HttpRuntimeSection();
int num1 = (config1 != null) ? config1.MaxRequestLength : 0x400000;
args.IsValid = (fileUpload.PostedFile.ContentLength > num1);
}
}
}
-------------------------------------------------------
'網路上找到的資料
'有一个vb的
'生成缩略图
Sub MakeThumbnail(ByVal originalImagePath As String, ByVal thumbnailPath As String, ByVal width As Integer, ByVal height As Integer, ByVal mode As String)
Dim originalImage = System.Drawing.Image.FromFile(originalImagePath)
Dim towidth As Integer = width
Dim toheight As Integer = height
Dim x As Integer = 0
Dim y As Integer = 0
Dim ow As Integer = originalImage.Width
Dim oh As Integer = originalImage.Height
Select Case (mode)
Case "HW " '指定高宽缩放(可能变形)
Case "W " '指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width
Case "H " '指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height
Case "Cut " '指定高宽裁减(不变形)
If (CType(originalImage.Width, Double) / CType(originalImage.Height, Double)) > (CType(towidth, Double) / CType(toheight, Double)) Then
oh = originalImage.Height
ow = originalImage.Height * towidth / toheight
y = 0
x = (originalImage.Width - ow) / 2
Else
ow = originalImage.Width
oh = originalImage.Width * height / towidth
x = 0
y = (originalImage.Height - oh) / 2
End If
End Select
'新建一个bmp图片
Dim bitmap = New System.Drawing.Bitmap(towidth, toheight)
'新建一个画板
Dim g = System.Drawing.Graphics.FromImage(bitmap)
'设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
'设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
'清空画布并以透明背景色填充
g.Clear(System.Drawing.Color.Transparent)
'在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, New System.Drawing.Rectangle(0, 0, towidth, toheight), New System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel)
Try
'以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg)
Catch ex As Exception
Throw ex
Finally
originalImage.Dispose()
bitmap.Dispose()
g.Dispose()
End Try
End Sub
後來網路上又找到呼叫另外軟體來做縮圖的
http://www.dotblogs.com.tw/killysss/archive/2011/06/20/29257.aspx?fid=30793#feedback
app_code資料夾的使用_圖形驗證數字
最近研究章立民研究室所出的書,其中有一章節提到圖形驗證(圖文驗證)的機制,可是該書籍的光碟使用讓人並不容易了解,我載入圖文驗證的網站是編譯都發生錯誤,畫面如下,後來去 1002.aspx.vb 找,果然有這行指令,在該檔案內也找不到 common_func() 相關的資料,後來發現原來在 網站內有一個app_code資料夾,該資料夾內有Common_Func.vb這個檔案,上網查了app_code資料夾,原來這種app_code資料夾主要是儲存共用程式碼,以前好像曾經用過,記憶已經退化了,所以要在原本的網站內按右鍵加入ASP.NET資料夾,選app_code,接著將common_func.vb複製進去,該錯誤就解決了,但出現了另外的錯誤,按照相同的方式,總共複製了 common_func.vb, string_func.vb, decoder.vb 。本以為解決了,結果瀏覽器還是出現Not Found的錯誤,不死心接著在visual studio 建置/建置方案,發現有一個BuildImage未定義的錯誤,於是用相同的方法,找到 BuildImage.vb ,並複製到app_code資料夾,終於成功看到圖文驗證的畫面了。
好不容易看到圖文驗證的畫面,怎麼有一種數字出不來,原來該數字是從預設的圖片來顯示的,終於在 BuildImage.vb 內找到了圖片所在位置 /images/confirm/ 內,將整個資料夾複製到我們的網站內終於正常顯示了。
2012年9月26日 星期三
下載或刪除儲存在資料庫的檔案_ashx泛型處理常式
使用泛型處理常式 download.ashx 來下載儲存於資料庫欄位中的資料。
此檔案會從被呼叫的網址收集scid參數,當成資料庫下載的主要鍵
<%@ WebHandler Language="VB" Class="download" %>
'----------------------------------------------------------------------------
'程式功能 檔案上傳下載 (以資料庫存放檔案) > 檔案下載
'----------------------------------------------------------------------------
Imports System
Imports System.Data.SqlClient
Imports System.Web
Imports System.Web.Configuration
Imports System.Web.SessionState ' 要使用 Session 必需加入此命名空間
Public Class download : Implements IHttpHandler, IRequiresSessionState
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
'context.Response.ContentType = "text/plain"
'context.Response.Write("Hello World")
Dim mErr As String = ""
Dim scid2 As Integer = -1
' 檢查使用者權限,但不存入登入紀錄
'Check_Power("2002", False, context)
If context.Request("scid") IsNot Nothing Then
If Integer.TryParse(context.Request("scid").Trim(), scid2) Then
' 處理下載檔案
Using Sql_conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("AppSysConnectionString").ConnectionString)
Sql_conn.Open()
Using Sql_Command As New SqlCommand()
Dim SqlString As String = ""
SqlString = "Select Top 1 fname, ftype, fcontent From 學生證照2 Where scid2 = @scid2"
Sql_Command.Connection = Sql_conn
Sql_Command.CommandText = SqlString
Sql_Command.Parameters.AddWithValue("scid2", scid2)
Dim Sql_Reader As SqlDataReader = Sql_Command.ExecuteReader()
If Sql_Reader.Read() Then
Dim fcontent As Byte() = DirectCast(Sql_Reader("fcontent"), Byte())
context.Response.Clear()
context.Response.Charset = "utf-8"
' 檔名要先編碼,中文檔名才不會有問題
context.Response.AddHeader("Content-Disposition", "inline;filename=" & context.Server.UrlEncode(Sql_Reader("fname").ToString().Trim()))
context.Response.ContentType = Sql_Reader("ftype").ToString()
context.Response.BinaryWrite(fcontent)
context.Response.End()
Else
mErr = "找不到這個檔案的資料!\n"
End If
End Using
End Using
Else
mErr = "參數傳送有問題!\n"
End If
Else
mErr = "參數傳送有問題!\n"
End If
If mErr <> "" Then
context.Response.ContentType = "text/html"
context.Response.Write(mErr)
context.Response.End()
End If
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
而另外有一個 filedelete_download.aspx 來呼叫剛剛撰寫的 download.ashx 。
此檔案會從被呼叫的網址收集scid參數,當成資料庫下載的主要鍵
<%@ WebHandler Language="VB" Class="download" %>
'----------------------------------------------------------------------------
'程式功能 檔案上傳下載 (以資料庫存放檔案) > 檔案下載
'----------------------------------------------------------------------------
Imports System
Imports System.Data.SqlClient
Imports System.Web
Imports System.Web.Configuration
Imports System.Web.SessionState ' 要使用 Session 必需加入此命名空間
Public Class download : Implements IHttpHandler, IRequiresSessionState
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
'context.Response.ContentType = "text/plain"
'context.Response.Write("Hello World")
Dim mErr As String = ""
Dim scid2 As Integer = -1
' 檢查使用者權限,但不存入登入紀錄
'Check_Power("2002", False, context)
If context.Request("scid") IsNot Nothing Then
If Integer.TryParse(context.Request("scid").Trim(), scid2) Then
' 處理下載檔案
Using Sql_conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("AppSysConnectionString").ConnectionString)
Sql_conn.Open()
Using Sql_Command As New SqlCommand()
Dim SqlString As String = ""
SqlString = "Select Top 1 fname, ftype, fcontent From 學生證照2 Where scid2 = @scid2"
Sql_Command.Connection = Sql_conn
Sql_Command.CommandText = SqlString
Sql_Command.Parameters.AddWithValue("scid2", scid2)
Dim Sql_Reader As SqlDataReader = Sql_Command.ExecuteReader()
If Sql_Reader.Read() Then
Dim fcontent As Byte() = DirectCast(Sql_Reader("fcontent"), Byte())
context.Response.Clear()
context.Response.Charset = "utf-8"
' 檔名要先編碼,中文檔名才不會有問題
context.Response.AddHeader("Content-Disposition", "inline;filename=" & context.Server.UrlEncode(Sql_Reader("fname").ToString().Trim()))
context.Response.ContentType = Sql_Reader("ftype").ToString()
context.Response.BinaryWrite(fcontent)
context.Response.End()
Else
mErr = "找不到這個檔案的資料!\n"
End If
End Using
End Using
Else
mErr = "參數傳送有問題!\n"
End If
Else
mErr = "參數傳送有問題!\n"
End If
If mErr <> "" Then
context.Response.ContentType = "text/html"
context.Response.Write(mErr)
context.Response.End()
End If
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
而另外有一個 filedelete_download.aspx 來呼叫剛剛撰寫的 download.ashx 。
傳遞網址 download.ashx?scid={0} {0}代表的是DataNavigateUrlField的資料,也就是資料表中的主要鍵欄位。
點選下載後,如果是圖形會直接開新視窗顯示圖片,如果是其他檔案會詢問開啟, 儲存 或 取消
當我們要實作刪除功能時,首先必須修改 sqldatasource ,設定sqldatasource資料來源時,刪除delete指令需要修改,改成
DELETE FROM [學生證照2] WHERE [scid2] = @original_scid2
接著從 gridview 啟用刪除即可,必要時可用編輯資料行調整左右位置
檔案上傳asp.net
檔案上傳一直是教書以來想要完成的事,可是大部分的書都叫讀者上傳到伺服器的某個資料夾儲存,這會是一個嚴重的問題。這學期教資料庫剛好複習一下,這次使用Visaul Studio 2010,是 ASP.NET 4.0,應該可以用個幾年吧。
1. 首先在設計模式布置FileUpload(負責選取檔案), textbox(負責輸入檔案描述,可空白),Button(負責驅動上傳), Literal(負責上傳後顯示資訊),而Label物件可以不用放。
而對應要儲存檔案的資料表設計如下, fcontent負責儲存檔案內容,ftype負責檔案類型,fsize檔案大小,fname檔案全名(包括附檔名),fext負責附檔名,fdesc是檔案的描述說明, fuploadtiem存上傳的日期時間。
而程式碼uploadfile.aspx.vb的內容如下
Imports System.Data.SqlClient
Imports System.Web.Configuration
Imports System.IO
Partial Class Default4
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
Dim icnt As Integer = 0, jcnt As Integer = 0
Dim sqlstring As String = "", merr As String = ""
Dim fname As String = "", fext As String = "", ftype As String = "", fsize As Integer = 0, fdesc As String = "", fuploadtime As DateTime = DateTime.Now
'處理上傳檔案、說明及檔案內容存入資料庫
Using sql_conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("APPSYSConnectionString").ConnectionString)
sql_conn.Open()
Using sql_command As New SqlCommand()
'儲存檔案
'For icnt = 1 To Request.Files.Count
Dim fu_file As FileUpload = DirectCast(Page.FindControl("fu_file"), FileUpload)
Dim tb_file As TextBox = DirectCast(Page.FindControl("tb_file"), TextBox)
If fu_file.HasFile Then
jcnt = jcnt + 1
fname = fu_file.FileName
fext = Path.GetExtension(fname).ToString()
fsize = fu_file.PostedFile.ContentLength
Response.Write(fsize)
If fsize > 1024000 Then
merr = "檔案超過1MB"
End If
ftype = fu_file.PostedFile.ContentType
fdesc = tb_file.Text.Trim()
'檔案存入資料庫
sqlstring = "insert into 學生證照2 " & "(fname, fext, ftype, fsize, fdesc, fcontent, fuploadtime)"
sqlstring &= " values (@fname, @fext, @ftype, @fsize, @fdesc, @fcontent, @fuploadtime)"
sql_command.Parameters.Clear()
sql_command.CommandText = sqlstring
sql_command.Connection = sql_conn
sql_command.Parameters.AddWithValue("fname", fname)
sql_command.Parameters.AddWithValue("fext", fext.ToLower())
sql_command.Parameters.AddWithValue("ftype", ftype)
sql_command.Parameters.AddWithValue("fsize", fsize)
sql_command.Parameters.AddWithValue("fdesc", fdesc)
'fuploadtime是以client的系統時間為準
sql_command.Parameters.AddWithValue("fuploadtime", fuploadtime)
sql_command.Parameters.AddWithValue("fcontent", fu_file.FileBytes)
If merr = "" Then
sql_command.ExecuteNonQuery()
End If
Else
merr = "沒有選擇任何上傳的檔案!"
End If
' Next
End Using
End Using
'msg_close()呼叫寫在aspx的javascript副程式,javascript必須寫在<head>與</head>中間
'為了減少複雜性,我將msg_close()的指令去掉了
If merr <> "" Then
'顯示錯誤訊息
lt_show.Text = "<script language=javascript>alert(""" & merr & """);</script>"
Else
'完成上傳,返回瀏覽頁
lt_show.Text = "<script language=javascript>alert(""資料上傳完成!\n"");location.replace(""filedelete_download.aspx"");</script>"
'lt_show.Text &= "location.replace(""Default5.aspx"");</script>"
End If
End Sub
End Class
另外要一提的是預設上傳檔案有大小限制,經過測試約在4MB左右,
因此在web.config <system.web>與 </system.web>之間,加上此行程式(改變上限為10MB) <httpRuntime maxRequestLength="10240"/>
如果超過10MB,瀏覽器的畫面會出現無法顯示網頁
為了避免此畫面,所以網頁可以允許上傳<1MB的檔案,但因為原本uploadfile.aspx.vb中,有小於1MB的條件
If fsize > 1024000 Then
merr = "檔案超過1MB"
End If
除了檔案大小外,也可透過限制使用者上傳檔案的附檔名來避免發生太大的檔案,可以google查到使用java script來限制,將原本uploadfile.aspx的html修改,從原本
<asp:FileUpload ID="fu_file" runat="server" /> 改成
<asp:FileUpload ID="fu_file" runat="server" onchange="return checkFileExtension(this);"/>
此外,將下列指令放在 uploadfile.aspx 原始檔<head>與</head>中,
<script type="text/javascript">
function checkFileExtension(elem) {
var filePath = elem.value;
if (filePath.indexOf('.') == -1) {
remove(elem);
alert('不正確的副檔名格式');
return false;
}
var validExtensions = new Array();
var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
//限制只能選取那些副檔名
validExtensions[0] = 'jpg';
validExtensions[1] = 'pdf';
validExtensions[2] = 'doc';
validExtensions[3] = 'docx';
validExtensions[4] = 'jpeg';
for (var i = 0; i < validExtensions.length; i++) {
if (ext == validExtensions[i])
return true;
}
remove(elem);
alert('不正確的副檔名格式: ' + ext.toUpperCase());
return false;
}
function remove(control) {
var who = control;
who.value = "";
var who2 = who.cloneNode(false);
who2.onchange = who.onchange;
who.parentNode.replaceChild(who2, who);
}
</script>
1. 首先在設計模式布置FileUpload(負責選取檔案), textbox(負責輸入檔案描述,可空白),Button(負責驅動上傳), Literal(負責上傳後顯示資訊),而Label物件可以不用放。
而對應要儲存檔案的資料表設計如下, fcontent負責儲存檔案內容,ftype負責檔案類型,fsize檔案大小,fname檔案全名(包括附檔名),fext負責附檔名,fdesc是檔案的描述說明, fuploadtiem存上傳的日期時間。
而程式碼uploadfile.aspx.vb的內容如下
Imports System.Data.SqlClient
Imports System.Web.Configuration
Imports System.IO
Partial Class Default4
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
Dim icnt As Integer = 0, jcnt As Integer = 0
Dim sqlstring As String = "", merr As String = ""
Dim fname As String = "", fext As String = "", ftype As String = "", fsize As Integer = 0, fdesc As String = "", fuploadtime As DateTime = DateTime.Now
'處理上傳檔案、說明及檔案內容存入資料庫
Using sql_conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("APPSYSConnectionString").ConnectionString)
sql_conn.Open()
Using sql_command As New SqlCommand()
'儲存檔案
'For icnt = 1 To Request.Files.Count
Dim fu_file As FileUpload = DirectCast(Page.FindControl("fu_file"), FileUpload)
Dim tb_file As TextBox = DirectCast(Page.FindControl("tb_file"), TextBox)
If fu_file.HasFile Then
jcnt = jcnt + 1
fname = fu_file.FileName
fext = Path.GetExtension(fname).ToString()
fsize = fu_file.PostedFile.ContentLength
Response.Write(fsize)
If fsize > 1024000 Then
merr = "檔案超過1MB"
End If
ftype = fu_file.PostedFile.ContentType
fdesc = tb_file.Text.Trim()
'檔案存入資料庫
sqlstring = "insert into 學生證照2 " & "(fname, fext, ftype, fsize, fdesc, fcontent, fuploadtime)"
sqlstring &= " values (@fname, @fext, @ftype, @fsize, @fdesc, @fcontent, @fuploadtime)"
sql_command.Parameters.Clear()
sql_command.CommandText = sqlstring
sql_command.Connection = sql_conn
sql_command.Parameters.AddWithValue("fname", fname)
sql_command.Parameters.AddWithValue("fext", fext.ToLower())
sql_command.Parameters.AddWithValue("ftype", ftype)
sql_command.Parameters.AddWithValue("fsize", fsize)
sql_command.Parameters.AddWithValue("fdesc", fdesc)
'fuploadtime是以client的系統時間為準
sql_command.Parameters.AddWithValue("fuploadtime", fuploadtime)
sql_command.Parameters.AddWithValue("fcontent", fu_file.FileBytes)
If merr = "" Then
sql_command.ExecuteNonQuery()
End If
Else
merr = "沒有選擇任何上傳的檔案!"
End If
' Next
End Using
End Using
'msg_close()呼叫寫在aspx的javascript副程式,javascript必須寫在<head>與</head>中間
'為了減少複雜性,我將msg_close()的指令去掉了
If merr <> "" Then
'顯示錯誤訊息
lt_show.Text = "<script language=javascript>alert(""" & merr & """);</script>"
Else
'完成上傳,返回瀏覽頁
lt_show.Text = "<script language=javascript>alert(""資料上傳完成!\n"");location.replace(""filedelete_download.aspx"");</script>"
'lt_show.Text &= "location.replace(""Default5.aspx"");</script>"
End If
End Sub
End Class
另外要一提的是預設上傳檔案有大小限制,經過測試約在4MB左右,
因此在web.config <system.web>與 </system.web>之間,加上此行程式(改變上限為10MB) <httpRuntime maxRequestLength="10240"/>
如果超過10MB,瀏覽器的畫面會出現無法顯示網頁
為了避免此畫面,所以網頁可以允許上傳<1MB的檔案,但因為原本uploadfile.aspx.vb中,有小於1MB的條件
If fsize > 1024000 Then
merr = "檔案超過1MB"
End If
除了檔案大小外,也可透過限制使用者上傳檔案的附檔名來避免發生太大的檔案,可以google查到使用java script來限制,將原本uploadfile.aspx的html修改,從原本
<asp:FileUpload ID="fu_file" runat="server" /> 改成
<asp:FileUpload ID="fu_file" runat="server" onchange="return checkFileExtension(this);"/>
此外,將下列指令放在 uploadfile.aspx 原始檔<head>與</head>中,
<script type="text/javascript">
function checkFileExtension(elem) {
var filePath = elem.value;
if (filePath.indexOf('.') == -1) {
remove(elem);
alert('不正確的副檔名格式');
return false;
}
var validExtensions = new Array();
var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
//限制只能選取那些副檔名
validExtensions[0] = 'jpg';
validExtensions[1] = 'pdf';
validExtensions[2] = 'doc';
validExtensions[3] = 'docx';
validExtensions[4] = 'jpeg';
for (var i = 0; i < validExtensions.length; i++) {
if (ext == validExtensions[i])
return true;
}
remove(elem);
alert('不正確的副檔名格式: ' + ext.toUpperCase());
return false;
}
function remove(control) {
var who = control;
who.value = "";
var who2 = who.cloneNode(false);
who2.onchange = who.onchange;
who.parentNode.replaceChild(who2, who);
}
</script>
2012年9月24日 星期一
PowerCam6上傳youtube
一開始想要使用powercam上傳,會發現有兩個上傳,一個是一般傳到學校數位學習系統支援SCIP 2.0的網站,而想要傳到youtube必須選擇進階/YouTube上傳
如果選到SCIP2的上傳想要傳到youtube,會有以下錯誤訊息visual studio 2010製作master-detail一對多資料表
新版的powercam6已經可以上傳到youtube了,終於表示使用powercam錄的影片可以進一步作後製,雖然powercam還有一些缺點(解析度的限制),不過聊勝於無,以下是我在visual studio 2010製作master-detail一對多資料表的查詢步驟。
2012年9月23日 星期日
SQL Server Management Studio資料表變更設計後無法存檔的解法
在Management Studio中修改了某一張資料表,設定主要鍵欄位後照以往經驗按存檔,沒想到竟然出現錯誤畫面說不允許儲存變更,趕緊上網找解法
SQL Server Management Studio資料表變更設計後無法存檔的解法
原來要從功能表中的選項
接著在選項的畫面中,選擇設計師/資料表和資料庫設計工具,將 防止儲存需要資料表重建的變更 取消勾選 即可。
SQL Server Management Studio資料表變更設計後無法存檔的解法
原來要從功能表中的選項
接著在選項的畫面中,選擇設計師/資料表和資料庫設計工具,將 防止儲存需要資料表重建的變更 取消勾選 即可。
判斷sql server版本
這學期教資料庫管理系統,常常要接觸一些sql server的問題,這次要記錄的是如何判斷目前正在執行的sql server版本?
可以在sql server management tool介面中執行 sql 指令
分別是三個指令
SELECT SERVERPROPERTY('productversion')
SELECT SERVERPROPERTY ('productlevel')
SELECT SERVERPROPERTY ('edition')
SQL Server 2008
RTM 2005.90.1399
SQL Server 2005 Service Pack 1 2005.90.2047
SQL Server 2005 Service Pack 2 2005.90.3042
SQL Server 2005 Service Pack 3 2005.90.4035
SQL Server 2000
產品版本 (例如:8.00.534)
產品等級 (例如:「RTM」或「SP2」)
版本 (例如:Standard Edition)。
可以在sql server management tool介面中執行 sql 指令
分別是三個指令
SELECT SERVERPROPERTY('productversion')
SELECT SERVERPROPERTY ('productlevel')
SELECT SERVERPROPERTY ('edition')
SQL Server 2008
- 產品版本 (例如,10.0.1600.22)
- 產品等級 (例如,RTM)
- 版本 (例如,Enterprise)
- 產品版本 (例如,9.00.1399.06)
- 產品等級 (例如,RTM)
- 版本 (例如,Enterprise Edition)
| RTM | 2005.90.1399 |
| SQL Server 2005 Service Pack 1 | 2005.90.2047 |
| SQL Server 2005 Service Pack 2 | 2005.90.3042 |
| SQL Server 2005 Service Pack 3 | 2005.90.4035 |
SQL Server 2005 Service Pack 1 2005.90.2047
SQL Server 2005 Service Pack 2 2005.90.3042
SQL Server 2005 Service Pack 3 2005.90.4035
| RTM | 2005.90.1399 |
| SQL Server 2005 Service Pack 1 | 2005.90.2047 |
| SQL Server 2005 Service Pack 2 | 2005.90.3042 |
| SQL Server 2005 Service Pack 3 | 2005.90.4035 |
SQL Server 2000
2012年9月17日 星期一
學習英文的免費資源
閱讀
英文漫畫-海賊王
http://unixmanga.com/onlinereading/One_Piece/One_Piece_c001-100.html
English-Zone
http://english-zone.com/index.php
聽力
American English Pronunciation Practice (For ESL/EFL)
http://www.manythings.org/pp/ 從錄音檔判斷發音相似字
Australia Network - Learning English - Learning Programs English Bites 從影片,字幕,測驗 學英文
http://australianetwork.com/learningenglish/
Randall's ESL Cyber Listening Lab 從不同階段的學習者, 選定單元(錄音檔, 字幕)練習
http://www.esl-lab.com/
VOA Learning
http://www.youtube.com/VOALearningenglish
Youtube 教育影片-大學
http://www.youtube.com/education?category=University
TED(Technology, English, Design)
http://www.youtube.com/user/tedtalksdirector/
寫作
Resume Templates 履歷範本
http://www.resumetemplates.org/
4hb.com 商業書信範本網站
http://www.4hb.com/
About.com 申請研究所學校, 文件
http://gradschool.about.com
http://www.essayedge.com/samples
拚報告、寫論文
http://writing.wisc.edu/Handbook/
英文漫畫-海賊王
http://unixmanga.com/onlinereading/One_Piece/One_Piece_c001-100.html
English-Zone
http://english-zone.com/index.php
聽力
American English Pronunciation Practice (For ESL/EFL)
http://www.manythings.org/pp/ 從錄音檔判斷發音相似字
Australia Network - Learning English - Learning Programs English Bites 從影片,字幕,測驗 學英文
http://australianetwork.com/learningenglish/
elllo English Listening Lesson Library Online - Learn English Naturally - Videos : Audio : Quizzes : Vocabulary 從不同國籍的談話錄影檔, 字幕, 測驗 來增進英文能力
http://www.elllo.org/english/home.htmRandall's ESL Cyber Listening Lab 從不同階段的學習者, 選定單元(錄音檔, 字幕)練習
http://www.esl-lab.com/
VOA Learning
http://www.youtube.com/VOALearningenglish
Youtube 教育影片-大學
http://www.youtube.com/education?category=University
TED(Technology, English, Design)
http://www.youtube.com/user/tedtalksdirector/
寫作
Resume Templates 履歷範本
http://www.resumetemplates.org/
4hb.com 商業書信範本網站
http://www.4hb.com/
About.com 申請研究所學校, 文件
http://gradschool.about.com
http://www.essayedge.com/samples
拚報告、寫論文
http://writing.wisc.edu/Handbook/
2012年7月15日 星期日
JAVA Math類別(次方, 取亂數, 三角函數, 四捨五入, 無條件捨去, 無條件進位)
Math.round()四捨五入、Math.floor()無條件捨去、Math.ceil() 無條件進位
在Java程式裡,"^"為XOR運算,不是次方。
Java要次方運算的話必須使用
double 要傳回的值=Math.pow(底數,次方數);
Java要使用分數,例如:二分之三,必須寫成"3.0/2.0",必須點零。
class test
{
public static void main(String[] args)
{
int a=2; /*底數*/ int b=3; /*次方數*/ double f=Math.pow(a,b); /*a和b套用到此行的程式(a的b次方等於f)*/ System.out.println("2的3次方等於"+f);
}
}
取亂數
math.random()*6+1
2012年7月9日 星期一
java 動態配置矩陣
參考自(http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/OneDimensionArray.htm)
由於陣列的記憶體空間是使用new配置而來,這意味著您也可以使用動態的方式來宣告陣列長度,而不用在程式中事先決定陣列大小,例如:
由於陣列的記憶體空間是使用new配置而來,這意味著您也可以使用動態的方式來宣告陣列長度,而不用在程式中事先決定陣列大小,例如:
2012年7月8日 星期日
JAVA學習心得-取得使用者輸入資料
有些java的學習書籍使用
import java.io.*;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine(); //取得輸入資料
int liter = Integer.parseInt(str); //將輸入資料轉換成整數
在 J2SE 5.0 之後,您可以使用java.util.Scanner取得使用者的輸入。(參考 http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/UserInput.htm)
import java.io.*;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine(); //取得輸入資料
int liter = Integer.parseInt(str); //將輸入資料轉換成整數
在 J2SE 5.0 之後,您可以使用java.util.Scanner取得使用者的輸入。(參考 http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/UserInput.htm)
2012年4月28日 星期六
英文名次的說法
參加競賽贏得第一名可以說 win first prize / win first place
注意不能加冠詞 the, 加了反而是錯的 (雖然平時序數前要加 the )
還可以說 finishin first place, place first
如果是會頒發冠軍頭銜的, 也可以說 win the championship
不過很多比賽其實只會有一個最後的贏家, 就是 winner
而不會有第二名或第三名
所以如果看到像 He is the winner of the singing contest. 當然指的就是第一名
還可以說 finishin first place, place first
如果是會頒發冠軍頭銜的, 也可以說 win the championship
不過很多比賽其實只會有一個最後的贏家, 就是 winner
而不會有第二名或第三名
所以如果看到像 He is the winner of the singing contest. 當然指的就是第一名
贏得第二和第三名的, 依此類推就是 win second / third prize / place
也可以說 finish in second / third place
place second / third
比如: Mike won second place in the singing contest.
= Mike finished in second place in the singing contest.
= Mike finished second / Mike placed second in the singing contest.
贏得第一名的人, 除了叫 champion 之外, 也可以叫 the first prize winner 或 winner 就好
比較特別的是, 在選美比賽裡,第二名是叫 the first runner-up
因為 runner-up 指的是除了冠軍者外, 剩下的人裡排名最高的
所以第二名者反而是叫 the first runner-up
第三名者則是 the second runner-up
因為 runner-up 指的是除了冠軍者外, 剩下的人裡排名最高的
所以第二名者反而是叫 the first runner-up
第三名者則是 the second runner-up
2012年2月25日 星期六
大數字與小數字
最近在研究計算機軟體的操作,突然想到英文數字million, billion, trillion,卻不知道到底幾個零,查字典也霧颯颯,原來英國與美國的用法不同,不過我想美國的用法比較常見,上網找了資料如下:
從1數到10我們都會,一百一千呢?也很簡單one hundred and one thousand. 一萬是ten thousand,十萬是one houndred thousand,
百萬不再是ten houndred thousand,老外又造了一個詞million專門表示一百萬,百萬富翁就是millionaire. 千萬就是ten million ,萬萬(億)就是one hundred million,十億又有個新詞了叫billion.百億顯然就是ten billion,千億是one hundred billion. 說到這,總能猜到了吧,萬億肯定又有一個新詞了,再下又是如出一轍。萬億很少用到了,這個詞是trillion. (特別說明一下:在英國本土語中,萬億是billion,十億他們用的是gillion,這裡我按美語標準作說明)這些是規則,當寫一個數字10000000000,你能立即把它用英語讀出來麼?別說英語,連中文都很困難,我得從右開始數:個、十、百……,這是我們習慣的讀法。美國人讀數字是每3位一讀的,這就是為什麼他們喜歡在數字上每3位劃一個逗號的原因,這是為了幫助他們讀數,方向也是從右至左,剛才那個數字劃完後就是10,000,000,000.
現在來找規律(從右開始讀):第一個逗號前的數字讀成thousand, 1,000 = one thousand 一千:10的三次方
第二個逗號前的數字讀成million, 1,000,000 = one million 一百萬:10的六次方
第三逗號前的數字讀成billion, 1,000,000,000 = one billion 十億:10的九次方第四個逗號前的數字讀成trillion, 1,000,000,000,000 = one trillion 兆:10的十二次方
在逗號之間我們用的就是one,ten和a hundred來表示了,如1,100 = one thousand and one hundred ;1,100,100 = one million,one hundred thousand and one hundred;來個複雜點的:1, 245, 333 = one million, two hundred and forty-five thousand, three hundred and thirty-three.2,782,234,467 = two billion, seven hundred and eighty-two million, two hundred and thirty-four thousand, four hundred and sixty-seven.
現在應該有點經驗了吧,英語裡把一個基數詞的基礎上進一位用ten表示,進兩位用one hundred,進三位時就用一個新的基數詞來代替,然後在新詞的基礎上進位用相同的方法。那麼開始的10,000,000,000用這種方法很容易讀出來就是ten billion(一百億)。其餘的留給大家去想吧,很慚愧,學了這麼多年英語,直到今天我才能把這些規律給找出來,不過為時未晚,既然想通了就和大家分享一下吧。
現在來找規律(從右開始讀):第一個逗號前的數字讀成thousand, 1,000 = one thousand 一千:10的三次方
第二個逗號前的數字讀成million, 1,000,000 = one million 一百萬:10的六次方
第三逗號前的數字讀成billion, 1,000,000,000 = one billion 十億:10的九次方第四個逗號前的數字讀成trillion, 1,000,000,000,000 = one trillion 兆:10的十二次方
在逗號之間我們用的就是one,ten和a hundred來表示了,如1,100 = one thousand and one hundred ;1,100,100 = one million,one hundred thousand and one hundred;來個複雜點的:1, 245, 333 = one million, two hundred and forty-five thousand, three hundred and thirty-three.2,782,234,467 = two billion, seven hundred and eighty-two million, two hundred and thirty-four thousand, four hundred and sixty-seven.
現在應該有點經驗了吧,英語裡把一個基數詞的基礎上進一位用ten表示,進兩位用one hundred,進三位時就用一個新的基數詞來代替,然後在新詞的基礎上進位用相同的方法。那麼開始的10,000,000,000用這種方法很容易讀出來就是ten billion(一百億)。其餘的留給大家去想吧,很慚愧,學了這麼多年英語,直到今天我才能把這些規律給找出來,不過為時未晚,既然想通了就和大家分享一下吧。
而我們習慣的中文對應數字則為:
萬:10的四次方
億(千萬):10的八次方
兆(千億):10的十二次方。
兆(千億):10的十二次方。
參考資料:
常見海島型木地板厚度300條的意思是3mm,也就是3公厘的實木皮黏合其他的夾板所構成。
電子游標卡尺照片(以下資料來自 http://blog.xuite.net/afuu3849/tree4444/40216105 )
薄塑膠袋約1條(0.01mm)
一般薄紙張約10條(0.1mm),頭髮一般約為70條也就是0.7mm
1毫米(mm)=10的負3次方m=0.001m=1mm=100條
1條 = 10的負5次方m = 0.00001m = 0.01mm = 1條 = 10微米 = 10000奈米 普通的車床最小刻度就是0.01mm 1微米(μm)=10的負6次方m = 0.000001m = 0.001mm = 0.001mm = 0.1條 = 1000奈米1奈米(nm)=10的負9次方m = 0.001μm = 0.000001mm
小數點
分 - 0.1 ~ d釐 - 0.01 ~ c毫 - 0.001 ~ m絲 - 0.000 1 ~ 100u忽 - 0.000 01 ~ 10u微 - 0.000 001 ~ u (µ)纖 - 0.000 000 1 ~ 100n沙 - 0.000 000 01 ~ 10n塵 - 0.000 000 001 ~ n (nano, nm就是奈米)埃 - 0.000 000 000 1 ~ 100p渺 - 0.000 000 000 01 ~ 10p莫 - 0.000 000 000 001 ~ p (pico)
分 - 0.1 ~ d釐 - 0.01 ~ c毫 - 0.001 ~ m絲 - 0.000 1 ~ 100u忽 - 0.000 01 ~ 10u微 - 0.000 001 ~ u (µ)纖 - 0.000 000 1 ~ 100n沙 - 0.000 000 01 ~ 10n塵 - 0.000 000 001 ~ n (nano, nm就是奈米)埃 - 0.000 000 000 1 ~ 100p渺 - 0.000 000 000 01 ~ 10p莫 - 0.000 000 000 001 ~ p (pico)
訂閱:
文章 (Atom)

































