參考來源
2012年1月31日 星期二
rdlc匯出excel或PDF
參考引用
--
private DataTable LoadSalesData()
{
// Load data from XML file.
DataSet dataSet = new DataSet();
dataSet.ReadXml(@"c:\Reports\data.xml");
return dataSet.Tables[0];
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.reportViewer1.ProcessingMode = ProcessingMode.Local;
this.reportViewer1.LocalReport.ReportPath = @"c:\Reports\Report1.rdl";
reportViewer1.LocalReport.DataSources.Add(
new ReportDataSource("Sales", LoadSalesData()));
this.reportViewer1.RefreshReport();
}
private void button1_Click(object sender, EventArgs e)
{
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string extension;
byte[] bytes = reportViewer1.LocalReport.Render(
"Excel", null, out mimeType, out encoding, out extension,
out streamids, out warnings);
FileStream fs = new FileStream(@"c:\output.xls", FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Close();
MessageBox.Show("Report exported to output.xls", "Info");
}
--
private DataTable LoadSalesData()
{
// Load data from XML file.
DataSet dataSet = new DataSet();
dataSet.ReadXml(@"c:\Reports\data.xml");
return dataSet.Tables[0];
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.reportViewer1.ProcessingMode = ProcessingMode.Local;
this.reportViewer1.LocalReport.ReportPath = @"c:\Reports\Report1.rdl";
reportViewer1.LocalReport.DataSources.Add(
new ReportDataSource("Sales", LoadSalesData()));
this.reportViewer1.RefreshReport();
}
private void button1_Click(object sender, EventArgs e)
{
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string extension;
byte[] bytes = reportViewer1.LocalReport.Render(
"Excel", null, out mimeType, out encoding, out extension,
out streamids, out warnings);
FileStream fs = new FileStream(@"c:\output.xls", FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Close();
MessageBox.Show("Report exported to output.xls", "Info");
}
Excel Data Reader - Read Excel files in .NET
Excel Data Reader - Read Excel files in .NET 元件
--
不想寫code的,可使用上面這元件來讀 excel 檔
引用官網 code:
c#:
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//...
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//...
//3. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();
//...
//4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
//5. Data Reader methods
while (excelReader.Read())
{
//excelReader.GetInt32(0);
}
//6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();
vbnet:
Dim stream As FileStream = File.Open(filePath, FileMode.Open, FileAccess.Read)
'1. Reading from a binary Excel file ('97-2003 format; *.xls)
Dim excelReader As IExcelDataReader = ExcelReaderFactory.CreateBinaryReader(stream)
'...
'2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
Dim excelReader As IExcelDataReader = ExcelReaderFactory.CreateOpenXmlReader(stream)
'...
'3. DataSet - The result of each spreadsheet will be created in the result.Tables
Dim result As DataSet = excelReader.AsDataSet()
'...
'4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = True
Dim result As DataSet = excelReader.AsDataSet()
'5. Data Reader methods
While excelReader.Read()
'excelReader.GetInt32(0);
End While
'6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close()
--
不想寫code的,可使用上面這元件來讀 excel 檔
引用官網 code:
c#:
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//...
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//...
//3. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();
//...
//4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
//5. Data Reader methods
while (excelReader.Read())
{
//excelReader.GetInt32(0);
}
//6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();
vbnet:
Dim stream As FileStream = File.Open(filePath, FileMode.Open, FileAccess.Read)
'1. Reading from a binary Excel file ('97-2003 format; *.xls)
Dim excelReader As IExcelDataReader = ExcelReaderFactory.CreateBinaryReader(stream)
'...
'2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
Dim excelReader As IExcelDataReader = ExcelReaderFactory.CreateOpenXmlReader(stream)
'...
'3. DataSet - The result of each spreadsheet will be created in the result.Tables
Dim result As DataSet = excelReader.AsDataSet()
'...
'4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = True
Dim result As DataSet = excelReader.AsDataSet()
'5. Data Reader methods
While excelReader.Read()
'excelReader.GetInt32(0);
End While
'6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close()
vbnet 讀取 excel 採用 OleDbDataReader
參考引用來源
--
Using m_connexcel As OleDbConnection = New OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source={0};" & _
"Extended Properties=""Excel 8.0;HDR=NO""", SPREADSHEET_NAME))
m_connexcel.Open()
Using cmd As OleDbCommand = New OleDbCommand(String.Format("SELECT * FROM [{0}]", DATARANGE), m_connexcel)
Using oRDR As OleDbDataReader = cmd.ExecuteReader
While (oRDR.Read)
If Not oRDR.IsDBNull(oRDR.GetOrdinal("F1")) Then
MsgBox(oRDR.GetString(oRDR.GetOrdinal("F1")))
End If
End While
End Using
End Using
m_connexcel.Close()
End Using
說明:
Set 'HDR' in the connection string to 'YES' if you want to use the first row as the field names, otherwise the fields will be called
F1, F2, F3 etc...
--
Using m_connexcel As OleDbConnection = New OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source={0};" & _
"Extended Properties=""Excel 8.0;HDR=NO""", SPREADSHEET_NAME))
m_connexcel.Open()
Using cmd As OleDbCommand = New OleDbCommand(String.Format("SELECT * FROM [{0}]", DATARANGE), m_connexcel)
Using oRDR As OleDbDataReader = cmd.ExecuteReader
While (oRDR.Read)
If Not oRDR.IsDBNull(oRDR.GetOrdinal("F1")) Then
MsgBox(oRDR.GetString(oRDR.GetOrdinal("F1")))
End If
End While
End Using
End Using
m_connexcel.Close()
End Using
說明:
Set 'HDR' in the connection string to 'YES' if you want to use the first row as the field names, otherwise the fields will be called
F1, F2, F3 etc...
vbnet 讀取 excel 採用 OleDb dataset
參考引用來源
--
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim myPath As String = "D:\CourseFootprints.xls"
Try
Dim DS As System.Data.DataSet
Dim strPath, strSheet As String
strPath = "D:\Test.xls"
strSheet = "Sheet1"
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
MyConnection = New System.Data.OleDb.OleDbConnection( _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & strPath & ";Extended Properties=""Excel 8.0;IMEX=1;HDR=YES;""")
' Select the data from Sheet1 of the workbook.
MyCommand = New System.Data.OleDb.OleDbDataAdapter( _
"select * from [" & strSheet & "$]", MyConnection)
DS = New System.Data.DataSet
MyCommand.Fill(DS)
Dim dv As DataView
dv = DS.Tables(0).DefaultView
dgGridVw.DataSource = dv
MyConnection.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
VB.net存取Excel
網路上面多半使用ADO來存取Excel,但是個人覺得這種方式蠻不友善的.
尤其對於已經熟悉VBA的人來說,
能用VBA中的物件模型及概念應用在.net中來存取Excel才是真正的王道啊~
在下面的範例中就是使用Excel的核心來存取資料:
'範例
Imports Microsoft.Office.Interop.Excel
Public Sub 存取Excel()
Dim oExcel As Excel.ApplicationClass
Dim oBook As Excel.WorkbookClass
Dim oBooks As Excel.Workbooks
Dim oSheet As Excel.Worksheet
Try
'建立Excel物件並開啟C:\01.xls中的Sheet1
oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oBooks = oExcel.Workbooks
oBook = oBooks.Open("C:\01.xls")
oSheet = oBook.Worksheets("Sheet1")
'寫入資料至Sheet1中的A1儲存格
oSheet.Cells(1, 1).value = "Test"
'讀取Sheet1中的A1儲存格
Dim test As String
test = oSheet.Cells(1, 1).value.ToString
'關閉並釋放Excel物件
oBook.Close(False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
oBook = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks)
oBooks = Nothing
oExcel.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
oExcel = Nothing
Catch ex As Exception
End Try
End Sub
VB.net 檔案下載
本文使用VB.net 2005 Express進行下載:
下載的方式有二:
(一)使用System.Net.WebClien下載,
範例如下:
Dim 網址 as String = "Http://yahoo.com.tw/a.jpg"
Dim 存檔路徑 as String = "C:\"
Dim 存檔檔名 as String = "a.jpg"
Dim strFilePath As String = 存檔路徑 + "\" + 存檔檔名
Dim dwl As New System.Net.WebClient()
dwl.DownloadFile(網址, strFilePath)
dwl.Dispose()
(二)使用My.Computer.Network.DownloadFile下載*:
語法如下:
My.Computer.Network.DownloadFile(address, destinationFileName, username, password, showUI,connectionTimeout, overwrite)
範例:
My.Computer.Network.DownloadFile("http://192.168.1.1/download.ini", "C:\Program Files\download.ini", "", "", True, 500, True)
2012年1月30日 星期一
VB.NET Crystal Reports Export to PDF
參考1
參考2
參考3
參考4
參考5
參考6:C# Crystal Reports Export to Pdf
參考引用8
--
Imports System.Data
Imports System.Data.SqlClient
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.IO
'This call is required by the Web Form Designer.
Private Sub InitializeComponent()
'start - This code should be pasted under #Region Private Sub itializeComponent()
'rptProduct is the name of crystal report.
Me.docProd = New rptProduct
'
'docProd
'
Me.docProd.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.DefaultPaperOrientation
Me.docProd.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.DefaultPaperSize
Me.docProd.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Upper
Me.docProd.PrintOptions.PrinterDuplex = CrystalDecisions.Shared.PrinterDuplex.Default
'Ends here
'Declaration of report document
Protected WithEvents docProd As rptProduct
Private Sub CreatePDF()
Dim objDS As New DataSet
Dim dfdoFile As New CrystalDecisions.Shared.DiskFileDestinationOptions
Dim strServerPath As String
Dim szFileName As String
'Create dataset as per requirement
docProd.SetDataSource(objDS.Tables(0))
szFileName = Session.SessionID & ".pdf" ' rptDailyCalls.pdf
strServerPath = MapPath("~") & "\Report\" ' Here the pdf file will be saved.
File.Delete(strServerPath & "\" & szFileName) ' Delete file first
dfdoFile.DiskFileName = strServerPath & "\" & szFileName
With docProd
.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile
.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat
.ExportOptions.DestinationOptions = dfdoFile
.Export()
End With
'URL of the pdf file
Response.Redirect("http://localhost/WebApplication1/" & szFileName ,Flase)
End Sub
--
引用:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class Form1
Dim cryRpt As New ReportDocument
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt")
CrystalReportViewer1.ReportSource = cryRpt
CrystalReportViewer1.Refresh()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Try
Dim CrExportOptions As ExportOptions
Dim CrDiskFileDestinationOptions As New _
DiskFileDestinationOptions()
Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()
CrDiskFileDestinationOptions.DiskFileName = _
"c:\crystalExport.pdf"
CrExportOptions = cryRpt.ExportOptions
With CrExportOptions
.ExportDestinationType = ExportDestinationType.DiskFile
.ExportFormatType = ExportFormatType.PortableDocFormat
.DestinationOptions = CrDiskFileDestinationOptions
.FormatOptions = CrFormatTypeOptions
End With
cryRpt.Export()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
參考2
參考3
參考4
參考5
參考6:C# Crystal Reports Export to Pdf
參考引用8
--
Imports System.Data
Imports System.Data.SqlClient
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.IO
'This call is required by the Web Form Designer.
Private Sub InitializeComponent()
'start - This code should be pasted under #Region Private Sub itializeComponent()
'rptProduct is the name of crystal report.
Me.docProd = New rptProduct
'
'docProd
'
Me.docProd.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.DefaultPaperOrientation
Me.docProd.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.DefaultPaperSize
Me.docProd.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Upper
Me.docProd.PrintOptions.PrinterDuplex = CrystalDecisions.Shared.PrinterDuplex.Default
'Ends here
'Declaration of report document
Protected WithEvents docProd As rptProduct
Private Sub CreatePDF()
Dim objDS As New DataSet
Dim dfdoFile As New CrystalDecisions.Shared.DiskFileDestinationOptions
Dim strServerPath As String
Dim szFileName As String
'Create dataset as per requirement
docProd.SetDataSource(objDS.Tables(0))
szFileName = Session.SessionID & ".pdf" ' rptDailyCalls.pdf
strServerPath = MapPath("~") & "\Report\" ' Here the pdf file will be saved.
File.Delete(strServerPath & "\" & szFileName) ' Delete file first
dfdoFile.DiskFileName = strServerPath & "\" & szFileName
With docProd
.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile
.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat
.ExportOptions.DestinationOptions = dfdoFile
.Export()
End With
'URL of the pdf file
Response.Redirect("http://localhost/WebApplication1/" & szFileName ,Flase)
End Sub
--
引用:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class Form1
Dim cryRpt As New ReportDocument
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt")
CrystalReportViewer1.ReportSource = cryRpt
CrystalReportViewer1.Refresh()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Try
Dim CrExportOptions As ExportOptions
Dim CrDiskFileDestinationOptions As New _
DiskFileDestinationOptions()
Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()
CrDiskFileDestinationOptions.DiskFileName = _
"c:\crystalExport.pdf"
CrExportOptions = cryRpt.ExportOptions
With CrExportOptions
.ExportDestinationType = ExportDestinationType.DiskFile
.ExportFormatType = ExportFormatType.PortableDocFormat
.DestinationOptions = CrDiskFileDestinationOptions
.FormatOptions = CrFormatTypeOptions
End With
cryRpt.Export()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
DataGridView 結合 DateTimePicker
參考引用
--
--
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace DataGridViewDateTimePicker { public partial class MainForm : Form { private bool _CheckChange = false; public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { // TODO: 這行程式碼會將資料載入 'database1DataSet.Table1' 資料表。您可以視需要進行移動或移除。 this.table1TableAdapter.Fill(this.database1DataSet.Table1); //設定DateTimePicker的高度 this.dateTimePicker1.Height = this.dataGridView1.Height; } //將DateTimePicker控制項定位在DataGridView的Column上 private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) { if (this.dataGridView1.Columns[e.ColumnIndex].HeaderText == "date") { Rectangle r = this.dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false); r = this.dataGridView1.RectangleToScreen(r); this.dateTimePicker1.Location = this.RectangleToClient(r).Location; this.dateTimePicker1.Size = r.Size; this._CheckChange = true; this.dateTimePicker1.Text = this.dataGridView1.CurrentCell.Value.ToString(); this._CheckChange = false; this.dateTimePicker1.Visible = true; } else { this.dateTimePicker1.Visible = false; } } //改變Column的值 private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { if (_CheckChange) return; this.dataGridView1.CurrentCell.Value = this.dateTimePicker1.Text; } }}
GetManifestResourceStream 的運用說明
參考引用來源
--
利用到Assembly的GetManifestResourceStream來載入資源(建置動作:內嵌資源)
using System;
--
利用到Assembly的GetManifestResourceStream來載入資源(建置動作:內嵌資源)
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection;//要記得using namespace WindowsApplication1 { public partial class GetResourceStream : Form { public GetResourceStream() { InitializeComponent(); } private void GetResourceStream_Load(object sender, EventArgs e) { Assembly asm = Assembly.GetExecutingAssembly(); string name = asm.GetName().Name; Bitmap bmp = new Bitmap(asm.GetManifestResourceStream(name + ".f6.jpg"));//載入圖片資源 this.pictureBox1.Image = bmp; } } }
CheckBox in DataGridView
參考來源 有附原碼
--
Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
If e.ColumnIndex = 5 Then
If DataGridView1(5, e.RowIndex).Value() = False Then
If MessageBox.Show("Are you sure you want to discontinue this product?", "CheckBox", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
DataGridView1(5, e.RowIndex).Value = True
End If
End If
End If
End Sub
--
Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
If e.ColumnIndex = 5 Then
If DataGridView1(5, e.RowIndex).Value() = False Then
If MessageBox.Show("Are you sure you want to discontinue this product?", "CheckBox", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
DataGridView1(5, e.RowIndex).Value = True
End If
End If
End If
End Sub
2012年1月29日 星期日
ms-sql 修改預設值
參考引用
--
如果欄位已經有預設值,則必須先將欄位的Default值移除掉,指令是:
ALTER TABLE Test DROP CONSTRAINT DF_Test_UserName
然後再重新設定該UserName欄位的預設值:
ALTER TABLE Test ADD CONSTRAINT DF_Test_UserName DEFAULT 'ABCDEF' FOR UserName
--
如果欄位已經有預設值,則必須先將欄位的Default值移除掉,指令是:
ALTER TABLE Test DROP CONSTRAINT DF_Test_UserName
然後再重新設定該UserName欄位的預設值:
ALTER TABLE Test ADD CONSTRAINT DF_Test_UserName DEFAULT 'ABCDEF' FOR UserName
open PDF,Doc,Xls,Jpeg,Tif files within the VB.Net Application
參考來源
--
Dim p As New Process
Dim pi As New ProcessStartInfo
pi.FileName = "C:\Ranjith.pdf"
p.StartInfo = pi
p.Start()
--
Dim p As New Process
Dim pi As New ProcessStartInfo
pi.FileName = "C:\Ranjith.pdf"
p.StartInfo = pi
p.Start()
VB.Net Image 轉 Excel
Dim image As New Bitmap("C:\test.jpg")
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlRange As Excel.Range
xlApp = New Excel.Application
xlApp.DisplayAlerts = False
xlApp.Visible = True
xlBook = xlApp.Workbooks.Add()
'縮小 Excel Window
xlBook.Windows(1).Zoom = 10
xlSheet = xlBook.Sheets(1)
For i As Integer = 1 To image.Height - 1
For j As Integer = 1 To image.Width - 1
xlRange = xlSheet.Cells(i, j)
xlRange.Interior.Color = ColorTranslator.ToWin32(image.GetPixel(j, i))
'儲存格長寬設定
xlRange.ColumnWidth = 2
xlRange.RowHeight = 15
Next j
Next i
xlBook.SaveAs("c:\1.xls")
xlBook.Close()
xlApp.Quit()
用VB.NET和Excel排生產計劃
引用
--
用VB.NET和Excel排生產計劃
—企業信息化探討之一
屠恩海(SunHai)
開發工具:Microsoft Visual Studio .NET 2003
操作系統:Windows XP
企業信息化失敗原因探討
中國企業上線ERP的成功率是不高的。這是為什麼呢?
實用的ERP系統有兩個特徵:
1. 要求具有高度的定制性
2. 要能根據企業實際隨時修改ERP系統
而現在企業的ERP系統開發基本採用外包模式,開發人員雖然也可以深入公司各個部門,掌握各個方面信息,然後進行定制開發。但是開發人員畢竟不是企業實際從業人員,掌握信息的廣度、深度畢竟是有限的,因此,通常情況下,所開發的ERP系統難以保證第一個特徵:要求具有高度的定制性。
另一方面,企業的實際情況隨時都可能發生變化,ERP系統也要隨時修改,才可能隨時滿足企業的需求。如果說一開始,ERP系統是滿足企業需求的,那麼一年以後呢?當然開發人員也可以跟蹤企業需求,隨時修改ERP系統,但總歸是不太方便。
理想的企業信息化模式
個人認為,理想的企業信息化模式是這樣的:
1.企業信息化系統的開發應由企業內部人員進行,而不是外包
只有這樣,實用的ERP系統所要求的兩個特徵:要求具有高度的定制性; 要能根據企業實際隨時修改ERP系統就很可能兩者都具備了。
2.企業信息化要從實際工作需要出發,逐步推進
公司實際從業人員(兼開發人員)從實際工作需要出發,開發出相應的信息化模塊、功能,再逐步完善。
現實中,許多企業開發的信息化系統功能很多,但又有多少人會用呢,最終是花架子而已。
就像筆者所在單位,說大不大,說小不小,但要一開始推行信息化管理,是不可能的。企業各部門人員素質不一,是不可能被普遍接受的。
要實現筆者所述理想的企業信息化模式,最大的困難是什麼?
最大的困難是是人才難得,特定管理人員要同時具備兩種能力:管理能力和開發能力。這種人才並不是每個企業都能得到的。
筆者雖然談不上什麼人才,但近幾年從事的卻是企業管理工作,並對信息化管理系統的開發亦略知一二。筆者就有可能親身實踐「理想的企業信息化模式」,並把有關經驗與大家分享。
公司實際情況分析
從2004年起,我主管公司的計劃工作,包括制定並下發產品生產計劃,自製件生產計劃,外協件採購計劃等。原來公司內一直用手寫的方式,由於公司產品的型號較多,如果我也是用手工填寫,計劃一多,整天忙於機械式的寫寫算算,做不了什麼事情。所以我考慮用電腦代替部分機械性的工作,我就可以騰出精力抓其他方面事情了。電腦可以輔助、代替我做哪些機械性的工作呢?
比如,每一成品由零件組裝而成,零件分自製件和外協件。每一產品由哪些零件組成是固定的。每個月的生產計劃,都要分解成自製件生產計劃和外協件採購計劃,這個分解工作我決定交給電腦來完成。
程序開發模式分析
用什麼開發工具,用什麼開發模式來實現所要求的功能呢?公司內暫時只有我自己運用,要實現的功能也不多,在一開始並沒有必要用複雜的大型數據庫系統。,為方便信息共享,我決定用VB.NET調用Excel來實現功能模塊。
為什麼用VB.NET而不用C#,因為Excel中有個VBA,其語法和VB.NET是近似的。而且,VB.NET和C#的區別主要是語法,而非功能。
我現在只要求實現用程序自動安排《自製件生產計劃》,這個功能不用VB.NET,單用VBA也能輕易實現。但是,考慮到以後可能的功能擴充、升級,還是用VB.NET。VB.NET是面向一代的開發工具,功能強大,而且調用EXCEL也很方便。
不推薦用VB6,VB.NET的入門及初級應用並不難,為何還要去用早期版本,而不用最新版本,掌握最新技術呢!
用VB.NET和Excel排生產計劃
軟件構思是這樣的:
先在EXCEL裡定制好《自製件生產計劃》的樣表(模板),保存為自製件生產計劃.xls,其中只有一個sheet:樣表。在樣表中設置好各種格式,填寫好固定項。再新建一空白workbook,保存為2004年自製件生產計劃.xls。
新建一VB.NET應用程序,命名為生產計劃報表。在窗體上放很少幾個控件,如:幾個文本框,用來輸入產品數量;checkbox用來先選擇是正式生產計劃還是增補生產計劃;另外用二個文本框用來輸入計劃時間和計劃編號。
點擊button,程序打開自製件生產計劃.xls和2004年自製件生產計劃.xls,把樣表copy到2004年自製件生產計劃.xls,並自動在目標sheet中填寫各自製件需要生產的數量。
下面是實現代碼及詳細註釋。注意,要先添加com引用Microsoft Excel Object Library,我的是office 2003,引用Microsoft Excel 11.0 Object Library。
Private Sub producePlan()
Call killEXCEL() '調用殺死EXCEL進程過程
'以下代碼判斷用戶填寫信息是否完整,如不完整則提示信息並退出.
If chkFormal.Checked = False And chkSubjoin.Checked = False Then
MsgBox("是正式計劃還是增補計劃??", MsgBoxStyle.Critical, "請先選擇計劃性質")
Exit Sub
End If
If txtDay.Text = "2004年月" Then
MsgBox("什麼月份的生產計劃???", MsgBoxStyle.Critical, "請填寫計劃時間")
Exit Sub
End If
If txt703.Text = Nothing Or txt909.Text = Nothing Or txt931.Text = Nothing Or txt932.Text = Nothing Then
MsgBox("請填寫計劃台數!", MsgBoxStyle.Critical, "計劃台數填寫不全")
Exit Sub
End If
If chkFormal.Checked = True And chkSubjoin.Checked = True Then
MsgBox("正式和增補兩者只能選一!", MsgBoxStyle.Critical, "請重新選擇計劃性質")
Exit Sub
End If
'以下代碼即是計算各自製件的數量,用中文來命名是免去代碼註釋
Dim 塗氟龍面板703 As Integer = CType(txt703.Text, Integer)
Dim 鈦金面板909 As Integer = CType(txt909.Text, Integer)
Dim 油磨不銹鋼面板931 As Integer = CType(txt931.Text, Integer)
Dim 油磨不銹鋼面板932 As Integer = CType(txt932.Text, Integer)
Dim 底盤24 As Integer = 塗氟龍面板703
Dim 底盤22 As Integer = 鈦金面板909
Dim 底盤41A As Integer = 油磨不銹鋼面板931
Dim 底盤41B As Integer = 油磨不銹鋼面板931
Dim 水盤25 As Integer = 塗氟龍面板703
Dim 水盤24 As Integer = 塗氟龍面板703
Dim 水盤22 As Integer = 鈦金面板909 * 2
Dim 中心支架2 As Integer = 塗氟龍面板703 + 鈦金面板909
Dim 長支架931 As Integer = (油磨不銹鋼面板931 + 油磨不銹鋼面板932) * 2
Dim 支架931U As Integer = 油磨不銹鋼面板931 * 2
Dim 支架932U As Integer = 油磨不銹鋼面板932 * 2
Dim 磁頭抱攀 As Integer = (鈦金面板909 + 油磨不銹鋼面板931 + 油磨不銹鋼面板932) * 2
Dim 電池抱攀 As Integer = (塗氟龍面板703 + 鈦金面板909 + 油磨不銹鋼面板931 + 油磨不銹鋼面板932) * 2
Dim 三通抱攀 As Integer = 電池抱攀 / 2
Dim 爐頭墊片 As Integer = 電池抱攀 * 3
'定義一個數組,方便在EXCEL中循環寫入數字,也可以放在EXCEL的VBA中實現
Dim allNum() As Integer = _
{塗氟龍面板703, 鈦金面板909, 油磨不銹鋼面板931, 油磨不銹鋼面板932, _
底盤24, 底盤22, 底盤41A, 底盤41B, _
水盤25, 水盤24, 水盤22, _
中心支架2, 長支架931, 支架931U, 支架932U, _
磁頭抱攀, 電池抱攀, 三通抱攀, 爐頭墊片}
Dim excelApp As New Excel.Application
Dim excelBook As Excel.Workbook '自製件生產計劃.xls
Dim excelbook2004 As Excel.Workbook '2004自製件生產計劃.xls
Dim excelWorksheet As Excel.Worksheet
Dim planProperty As String '計劃性質,是正式計劃還是增補計劃
Try '建議用try方式捕捉錯誤,處理錯誤
excelBook = excelApp.Workbooks.Open(Application.StartupPath & "\自製件生產計劃.xls")
excelbook2004 = excelApp.Workbooks.Open(Application.StartupPath & "\2004年自製件生產計劃.xls")
excelWorksheet = CType(excelBook.Worksheets("樣表"), Excel.Worksheet)
excelWorksheet.Copy(After:=excelbook2004.Sheets("sheet1"))
'把樣表copy到<2004年自製件生產計劃>workbook中sheet1的後面
excelApp.Visible = True '設置工作薄為可視
If chkFormal.Checked = True Then
planProperty = "正式"
ElseIf chkSubjoin.Checked = True Then
planProperty = "增補"
End If
With excelbook2004.ActiveSheet '用with 簡化代碼
.Range("D1").Value = txtDay.Text '計劃時間
.Range("C2").Value = "laoban公司" & txtDay.Text & planProperty & "採購計劃" '計劃依據
.Range("C25").Value = Now.Date.Today.ToShortDateString '這就是製表日期
.Range("F2").Value = txtNO.Text '計劃編號
End With
For i As Integer = 0 To 18 '共19種自製件
excelbook2004.ActiveSheet.cells(4 + i, 4) = allNum(i) '4+i是行號,第二個4是列號
Next '循環把各自製件數填入<2004年自製件生產計劃>中的活動工作表相應位置
Catch ex As Exception '捕捉錯誤,並回收資源,顯示錯誤
excelBook = Nothing
excelbook2004 = Nothing
excelWorksheet = Nothing
excelApp = Nothing
GC.Collect(0)
MsgBox(ex.ToString) '顯示錯誤信息,以查找定位
Exit Sub '出錯就退出
Finally '這裡的代碼一定會被執行到
excelBook = Nothing
excelbook2004 = Nothing
excelWorksheet = Nothing
excelApp = Nothing
GC.Collect(0)
End Try
MsgBox("已排好自製件生產計劃,請查看")
excelBook = Nothing
excelbook2004 = Nothing
excelWorksheet = Nothing
excelApp = Nothing
GC.Collect(0)
End Sub
下面是殺死EXCEL進程的過程:
Private Sub killEXCEL() '為進程避免衝突,在調用EXCEL前先殺死現有EXCEL進程.
Dim pProcess() As Process
pProcess = Process.GetProcesses()
Dim i As Integer
For i = 0 To pProcess.Length() - 1
If (pProcess(i).ProcessName = "EXCEL") Then
pProcess(i).Kill() '關閉進程
End If
Next
End Sub
以上代碼非常簡單,功能也很有限,但是很實用,以前都是用手工填寫並計算的,現在全部自動實現。本來要半小時的工作,現在可以在5分鐘內搞定。如果產品有變化,我可以隨時修改程序,使程序始終滿足企業需求。企業信息化就應該是這樣,從很小的功能開始。
也許老總一點不知道何為企業信息化,你可以展示給老總,看,以前要用半小時排計劃,現在5分鐘就解決,這也是屬於企業信息化。
昨天用了一個晚上時間寫了以上代碼,一個晚上只是一個晚上而已,以後可以省下多少時間?老總是經濟第一的,要他掏腰包聘專業開發人員,或外委軟件公司開發,總是要讓老總割血,也是不太可能的事。我是管理人員,本身也懂一點編程,信息化從自身工作開始,不用老總多花一分錢,反而可以提高工作效率。而且,原來公司裡只有極少懂產品的人有排計劃的能力,現在用程序來實現,人人都會。
中國的企業信息化,要麼華而不實,更多企業是根本不知並不用。我在公司內進行企業信息化探索受諸多因素限制。無論如何,我會將我的經驗與大家分享,大家共同來探索有中國特色的企業信息化之路。
--
用VB.NET和Excel排生產計劃
—企業信息化探討之一
屠恩海(SunHai)
開發工具:Microsoft Visual Studio .NET 2003
操作系統:Windows XP
企業信息化失敗原因探討
中國企業上線ERP的成功率是不高的。這是為什麼呢?
實用的ERP系統有兩個特徵:
1. 要求具有高度的定制性
2. 要能根據企業實際隨時修改ERP系統
而現在企業的ERP系統開發基本採用外包模式,開發人員雖然也可以深入公司各個部門,掌握各個方面信息,然後進行定制開發。但是開發人員畢竟不是企業實際從業人員,掌握信息的廣度、深度畢竟是有限的,因此,通常情況下,所開發的ERP系統難以保證第一個特徵:要求具有高度的定制性。
另一方面,企業的實際情況隨時都可能發生變化,ERP系統也要隨時修改,才可能隨時滿足企業的需求。如果說一開始,ERP系統是滿足企業需求的,那麼一年以後呢?當然開發人員也可以跟蹤企業需求,隨時修改ERP系統,但總歸是不太方便。
理想的企業信息化模式
個人認為,理想的企業信息化模式是這樣的:
1.企業信息化系統的開發應由企業內部人員進行,而不是外包
只有這樣,實用的ERP系統所要求的兩個特徵:要求具有高度的定制性; 要能根據企業實際隨時修改ERP系統就很可能兩者都具備了。
2.企業信息化要從實際工作需要出發,逐步推進
公司實際從業人員(兼開發人員)從實際工作需要出發,開發出相應的信息化模塊、功能,再逐步完善。
現實中,許多企業開發的信息化系統功能很多,但又有多少人會用呢,最終是花架子而已。
就像筆者所在單位,說大不大,說小不小,但要一開始推行信息化管理,是不可能的。企業各部門人員素質不一,是不可能被普遍接受的。
要實現筆者所述理想的企業信息化模式,最大的困難是什麼?
最大的困難是是人才難得,特定管理人員要同時具備兩種能力:管理能力和開發能力。這種人才並不是每個企業都能得到的。
筆者雖然談不上什麼人才,但近幾年從事的卻是企業管理工作,並對信息化管理系統的開發亦略知一二。筆者就有可能親身實踐「理想的企業信息化模式」,並把有關經驗與大家分享。
公司實際情況分析
從2004年起,我主管公司的計劃工作,包括制定並下發產品生產計劃,自製件生產計劃,外協件採購計劃等。原來公司內一直用手寫的方式,由於公司產品的型號較多,如果我也是用手工填寫,計劃一多,整天忙於機械式的寫寫算算,做不了什麼事情。所以我考慮用電腦代替部分機械性的工作,我就可以騰出精力抓其他方面事情了。電腦可以輔助、代替我做哪些機械性的工作呢?
比如,每一成品由零件組裝而成,零件分自製件和外協件。每一產品由哪些零件組成是固定的。每個月的生產計劃,都要分解成自製件生產計劃和外協件採購計劃,這個分解工作我決定交給電腦來完成。
程序開發模式分析
用什麼開發工具,用什麼開發模式來實現所要求的功能呢?公司內暫時只有我自己運用,要實現的功能也不多,在一開始並沒有必要用複雜的大型數據庫系統。,為方便信息共享,我決定用VB.NET調用Excel來實現功能模塊。
為什麼用VB.NET而不用C#,因為Excel中有個VBA,其語法和VB.NET是近似的。而且,VB.NET和C#的區別主要是語法,而非功能。
我現在只要求實現用程序自動安排《自製件生產計劃》,這個功能不用VB.NET,單用VBA也能輕易實現。但是,考慮到以後可能的功能擴充、升級,還是用VB.NET。VB.NET是面向一代的開發工具,功能強大,而且調用EXCEL也很方便。
不推薦用VB6,VB.NET的入門及初級應用並不難,為何還要去用早期版本,而不用最新版本,掌握最新技術呢!
用VB.NET和Excel排生產計劃
軟件構思是這樣的:
先在EXCEL裡定制好《自製件生產計劃》的樣表(模板),保存為自製件生產計劃.xls,其中只有一個sheet:樣表。在樣表中設置好各種格式,填寫好固定項。再新建一空白workbook,保存為2004年自製件生產計劃.xls。
新建一VB.NET應用程序,命名為生產計劃報表。在窗體上放很少幾個控件,如:幾個文本框,用來輸入產品數量;checkbox用來先選擇是正式生產計劃還是增補生產計劃;另外用二個文本框用來輸入計劃時間和計劃編號。
點擊button,程序打開自製件生產計劃.xls和2004年自製件生產計劃.xls,把樣表copy到2004年自製件生產計劃.xls,並自動在目標sheet中填寫各自製件需要生產的數量。
下面是實現代碼及詳細註釋。注意,要先添加com引用Microsoft Excel Object Library,我的是office 2003,引用Microsoft Excel 11.0 Object Library。
Private Sub producePlan()
Call killEXCEL() '調用殺死EXCEL進程過程
'以下代碼判斷用戶填寫信息是否完整,如不完整則提示信息並退出.
If chkFormal.Checked = False And chkSubjoin.Checked = False Then
MsgBox("是正式計劃還是增補計劃??", MsgBoxStyle.Critical, "請先選擇計劃性質")
Exit Sub
End If
If txtDay.Text = "2004年月" Then
MsgBox("什麼月份的生產計劃???", MsgBoxStyle.Critical, "請填寫計劃時間")
Exit Sub
End If
If txt703.Text = Nothing Or txt909.Text = Nothing Or txt931.Text = Nothing Or txt932.Text = Nothing Then
MsgBox("請填寫計劃台數!", MsgBoxStyle.Critical, "計劃台數填寫不全")
Exit Sub
End If
If chkFormal.Checked = True And chkSubjoin.Checked = True Then
MsgBox("正式和增補兩者只能選一!", MsgBoxStyle.Critical, "請重新選擇計劃性質")
Exit Sub
End If
'以下代碼即是計算各自製件的數量,用中文來命名是免去代碼註釋
Dim 塗氟龍面板703 As Integer = CType(txt703.Text, Integer)
Dim 鈦金面板909 As Integer = CType(txt909.Text, Integer)
Dim 油磨不銹鋼面板931 As Integer = CType(txt931.Text, Integer)
Dim 油磨不銹鋼面板932 As Integer = CType(txt932.Text, Integer)
Dim 底盤24 As Integer = 塗氟龍面板703
Dim 底盤22 As Integer = 鈦金面板909
Dim 底盤41A As Integer = 油磨不銹鋼面板931
Dim 底盤41B As Integer = 油磨不銹鋼面板931
Dim 水盤25 As Integer = 塗氟龍面板703
Dim 水盤24 As Integer = 塗氟龍面板703
Dim 水盤22 As Integer = 鈦金面板909 * 2
Dim 中心支架2 As Integer = 塗氟龍面板703 + 鈦金面板909
Dim 長支架931 As Integer = (油磨不銹鋼面板931 + 油磨不銹鋼面板932) * 2
Dim 支架931U As Integer = 油磨不銹鋼面板931 * 2
Dim 支架932U As Integer = 油磨不銹鋼面板932 * 2
Dim 磁頭抱攀 As Integer = (鈦金面板909 + 油磨不銹鋼面板931 + 油磨不銹鋼面板932) * 2
Dim 電池抱攀 As Integer = (塗氟龍面板703 + 鈦金面板909 + 油磨不銹鋼面板931 + 油磨不銹鋼面板932) * 2
Dim 三通抱攀 As Integer = 電池抱攀 / 2
Dim 爐頭墊片 As Integer = 電池抱攀 * 3
'定義一個數組,方便在EXCEL中循環寫入數字,也可以放在EXCEL的VBA中實現
Dim allNum() As Integer = _
{塗氟龍面板703, 鈦金面板909, 油磨不銹鋼面板931, 油磨不銹鋼面板932, _
底盤24, 底盤22, 底盤41A, 底盤41B, _
水盤25, 水盤24, 水盤22, _
中心支架2, 長支架931, 支架931U, 支架932U, _
磁頭抱攀, 電池抱攀, 三通抱攀, 爐頭墊片}
Dim excelApp As New Excel.Application
Dim excelBook As Excel.Workbook '自製件生產計劃.xls
Dim excelbook2004 As Excel.Workbook '2004自製件生產計劃.xls
Dim excelWorksheet As Excel.Worksheet
Dim planProperty As String '計劃性質,是正式計劃還是增補計劃
Try '建議用try方式捕捉錯誤,處理錯誤
excelBook = excelApp.Workbooks.Open(Application.StartupPath & "\自製件生產計劃.xls")
excelbook2004 = excelApp.Workbooks.Open(Application.StartupPath & "\2004年自製件生產計劃.xls")
excelWorksheet = CType(excelBook.Worksheets("樣表"), Excel.Worksheet)
excelWorksheet.Copy(After:=excelbook2004.Sheets("sheet1"))
'把樣表copy到<2004年自製件生產計劃>workbook中sheet1的後面
excelApp.Visible = True '設置工作薄為可視
If chkFormal.Checked = True Then
planProperty = "正式"
ElseIf chkSubjoin.Checked = True Then
planProperty = "增補"
End If
With excelbook2004.ActiveSheet '用with 簡化代碼
.Range("D1").Value = txtDay.Text '計劃時間
.Range("C2").Value = "laoban公司" & txtDay.Text & planProperty & "採購計劃" '計劃依據
.Range("C25").Value = Now.Date.Today.ToShortDateString '這就是製表日期
.Range("F2").Value = txtNO.Text '計劃編號
End With
For i As Integer = 0 To 18 '共19種自製件
excelbook2004.ActiveSheet.cells(4 + i, 4) = allNum(i) '4+i是行號,第二個4是列號
Next '循環把各自製件數填入<2004年自製件生產計劃>中的活動工作表相應位置
Catch ex As Exception '捕捉錯誤,並回收資源,顯示錯誤
excelBook = Nothing
excelbook2004 = Nothing
excelWorksheet = Nothing
excelApp = Nothing
GC.Collect(0)
MsgBox(ex.ToString) '顯示錯誤信息,以查找定位
Exit Sub '出錯就退出
Finally '這裡的代碼一定會被執行到
excelBook = Nothing
excelbook2004 = Nothing
excelWorksheet = Nothing
excelApp = Nothing
GC.Collect(0)
End Try
MsgBox("已排好自製件生產計劃,請查看")
excelBook = Nothing
excelbook2004 = Nothing
excelWorksheet = Nothing
excelApp = Nothing
GC.Collect(0)
End Sub
下面是殺死EXCEL進程的過程:
Private Sub killEXCEL() '為進程避免衝突,在調用EXCEL前先殺死現有EXCEL進程.
Dim pProcess() As Process
pProcess = Process.GetProcesses()
Dim i As Integer
For i = 0 To pProcess.Length() - 1
If (pProcess(i).ProcessName = "EXCEL") Then
pProcess(i).Kill() '關閉進程
End If
Next
End Sub
以上代碼非常簡單,功能也很有限,但是很實用,以前都是用手工填寫並計算的,現在全部自動實現。本來要半小時的工作,現在可以在5分鐘內搞定。如果產品有變化,我可以隨時修改程序,使程序始終滿足企業需求。企業信息化就應該是這樣,從很小的功能開始。
也許老總一點不知道何為企業信息化,你可以展示給老總,看,以前要用半小時排計劃,現在5分鐘就解決,這也是屬於企業信息化。
昨天用了一個晚上時間寫了以上代碼,一個晚上只是一個晚上而已,以後可以省下多少時間?老總是經濟第一的,要他掏腰包聘專業開發人員,或外委軟件公司開發,總是要讓老總割血,也是不太可能的事。我是管理人員,本身也懂一點編程,信息化從自身工作開始,不用老總多花一分錢,反而可以提高工作效率。而且,原來公司裡只有極少懂產品的人有排計劃的能力,現在用程序來實現,人人都會。
中國的企業信息化,要麼華而不實,更多企業是根本不知並不用。我在公司內進行企業信息化探索受諸多因素限制。無論如何,我會將我的經驗與大家分享,大家共同來探索有中國特色的企業信息化之路。
2012年1月20日 星期五
dataset datatype 參考
參考1:DataColumn.DataType Property
參考2:Creating DataTable
參考3:DataTable Class
--
重點在參考1,我須要的是底下項目值:
Boolean
Byte
Char
DateTime
Decimal
Double
Int16
Int32
Int64
SByte
Single
String
TimeSpan
UInt16
UInt32
UInt64
參考2:Creating DataTable
參考3:DataTable Class
--
重點在參考1,我須要的是底下項目值:
Boolean
Byte
Char
DateTime
Decimal
Double
Int16
Int32
Int64
SByte
Single
String
TimeSpan
UInt16
UInt32
UInt64
2012年1月19日 星期四
SqlCommand Parameters 相關參考
2012年1月18日 星期三
DateTimePicker – reset focus
引用來源
--
這篇真是即時雨呀,讚~
之前為了鍵盤操作行為弄這個focus , 找不出怎設定
現這篇即可重置focus了
--
這篇真是即時雨呀,讚~
之前為了鍵盤操作行為弄這個focus , 找不出怎設定
現這篇即可重置focus了
Private Sub DateTimePicker1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.Enter Dim fmt As DateTimePickerFormat = DateTimePicker1.Format DateTimePicker1.Format = DateTimePickerFormat.Long DateTimePicker1.Format = DateTimePickerFormat.Custom DateTimePicker1.Format = fmtEnd Sub
2012年1月15日 星期日
TabControl Enabled
引用參考來源
--
Dim iTotalTabs = Me.TabControl1.TabCount()
Dim X As Integer
For X = 0 To iTotalTabs - 1
With Me.TabControl1.TabPages(X)
.Enabled = False
If .Name = "TabPage2" Or .Name = "TabPage4" Then
.Enabled = True
End If
End With
Next
--
Dim iTotalTabs = Me.TabControl1.TabCount()
Dim X As Integer
For X = 0 To iTotalTabs - 1
With Me.TabControl1.TabPages(X)
.Enabled = False
If .Name = "TabPage2" Or .Name = "TabPage4" Then
.Enabled = True
End If
End With
Next
2012年1月14日 星期六
Adobe Acrobat 在 win7 更新發生權限不足問題 .xdp
實在困擾,竟發生在KEY部分上 .xdp 權限不足;此會造成 adobe reader , adobe acrobat 更新都失敗!
若您也發生此問題,可參考本篇作法:
Remove shell extensions after installing Adobe Acrobat
重點:
REGSVR32 /u "C:\Program Files\Adobe\Acrobat 9.0\Acrobat Elements\ContextMenu.dll"
REG DELETE HKEY_CLASSES_ROOT\.xdp\AcroExch.XDPDoc\ShellNew /f
REG DELETE HKEY_CLASSES_ROOT\.xdp\ShellNew /f
其實權限不足,可在: HKEY_CLASSES_ROOT\.xdp\ {將此層權限開放到帳號後,即可正常更新}
若您也發生此問題,可參考本篇作法:
Remove shell extensions after installing Adobe Acrobat
重點:
REGSVR32 /u "C:\Program Files\Adobe\Acrobat 9.0\Acrobat Elements\ContextMenu.dll"
REG DELETE HKEY_CLASSES_ROOT\.xdp\AcroExch.XDPDoc\ShellNew /f
REG DELETE HKEY_CLASSES_ROOT\.xdp\ShellNew /f
其實權限不足,可在: HKEY_CLASSES_ROOT\.xdp\ {將此層權限開放到帳號後,即可正常更新}
2012年1月12日 星期四
2012年1月11日 星期三
2012年1月10日 星期二
vbnet 加減年,加減日數
Dim dt As DateTime = DateTime.Now
'減
Dim dt2 As DateTime = dt.AddYears(-1) '减去一年
Dim dt3 As DateTime = dt.AddDays(-45) '减去45天
'加
Dim dt2 As DateTime = dt.AddYears(1) '加一年
Dim dt3 As DateTime = dt.AddDays(45) '加45天2012年1月9日 星期一
EntityConnection 連線字串
請參考微軟:EntityConnection.ConnectionString Property
--
這篇實在有很大的幫助!
在vs 2010 的 Entity (ORM) EDM 抽象層的威力下,實在該放了 ADO.NET 了!
完全不需什麼code , 就能輕易做出原本 ADO.NET 的結果
但 EF 實在包得緊了,綁定了連結字串 connectstring 跟著 app.config 走
這對開發商業產品,卻變得是一項:阻礙了
費了好大的g勁,總算找到這篇;運用此篇,能將app.config 抽出來!
這樣開發多樣化的結構,就不在是阻礙了
--
這篇實在有很大的幫助!
在vs 2010 的 Entity (ORM) EDM 抽象層的威力下,實在該放了 ADO.NET 了!
完全不需什麼code , 就能輕易做出原本 ADO.NET 的結果
但 EF 實在包得緊了,綁定了連結字串 connectstring 跟著 app.config 走
這對開發商業產品,卻變得是一項:阻礙了
費了好大的g勁,總算找到這篇;運用此篇,能將app.config 抽出來!
這樣開發多樣化的結構,就不在是阻礙了
2012年1月8日 星期日
2012年1月7日 星期六
vs2010 使用 framework 版本
當使用 vs 2010 開發時,要定義好各組件的框架版本:
最明顯的是 .NET Framework 4 與 .NET Framework 4 Client Profile
這是不同的, client profile 是包重點式的而非全部;開發時一定要使用 framwork 4 這樣有些組件才不會漏掉!
另外:
很多組件,原本都是使用 framework 2.0 為定版本;這些dll 能被 vs2005,vs2008 含蓋使用而不須作調整
但 :
若搬到 vs 2010 ,就必須再重新編譯原本的 framework 2.0 的組件;必須使用 vs 2010 將這些組件升級支援 framework 4.0 ; 這樣在 vs 2010 開發上才不會有版本不同的支援問題!
還有:
客端就必須安裝FULL Framework 4.0 , 而非安裝 client profile ; 這樣跑windows application 會出現一大推不支援的訊息出來!
2012年1月6日 星期五
2012年1月5日 星期四
datatable 加記錄資料
參考引用:
--
Module Module1
Sub Main()
' Get a DataTable instance from helper function.
Dim table As DataTable = GetTable()
End Sub
'''
''' Helper function that creates new DataTable.
'''
Function GetTable() As DataTable
' Create new DataTable instance.
Dim table As New DataTable
' Create four typed columns in the DataTable.
table.Columns.Add("Dosage", GetType(Integer))
table.Columns.Add("Drug", GetType(String))
table.Columns.Add("Patient", GetType(String))
table.Columns.Add("Date", GetType(DateTime))
' Add five rows with those columns filled in the DataTable.
table.Rows.Add(25, "Indocin", "David", DateTime.Now)
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now)
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now)
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now)
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now)
Return table
End Function
End Module
2012年1月4日 星期三
dataset 使用 datatable 加表
參考引用
--
' Two DataTables.
Dim table1 As DataTable = New DataTable("patients")
table1.Columns.Add("name")
table1.Columns.Add("id")
table1.Rows.Add("sam", 1)
table1.Rows.Add("mark", 2)
Dim table2 As DataTable = New DataTable("medications")
table2.Columns.Add("id")
table2.Columns.Add("medication")
table2.Rows.Add(1, "atenolol")
table2.Rows.Add(2, "amoxicillin")
' Create a DataSet. Put both tables in it.
Dim set1 As DataSet = New DataSet("office")
set1.Tables.Add(table1)
set1.Tables.Add(table2)
--
' Two DataTables.
Dim table1 As DataTable = New DataTable("patients")
table1.Columns.Add("name")
table1.Columns.Add("id")
table1.Rows.Add("sam", 1)
table1.Rows.Add("mark", 2)
Dim table2 As DataTable = New DataTable("medications")
table2.Columns.Add("id")
table2.Columns.Add("medication")
table2.Rows.Add(1, "atenolol")
table2.Rows.Add(2, "amoxicillin")
' Create a DataSet. Put both tables in it.
Dim set1 As DataSet = New DataSet("office")
set1.Tables.Add(table1)
set1.Tables.Add(table2)
google 雲端文件
google 的存件區
--
google 的棒吧! 雲端管理文件
我的習慣:
網路(雲端) , 要跟著google 走 (java)
開發,要跟著微軟走(NET)
但近期,android真是爆紅;實在開始憾動我的定位了
要朝 android 得玩 java 呢=.= , 老了..顧好本位就好
--
google 的棒吧! 雲端管理文件
我的習慣:
網路(雲端) , 要跟著google 走 (java)
開發,要跟著微軟走(NET)
但近期,android真是爆紅;實在開始憾動我的定位了
要朝 android 得玩 java 呢=.= , 老了..顧好本位就好
Free Studio 5,影片轉換器,ipod轉換器,mp4影片轉換器
官網 Free Studio 5
--
新的Free Studio Manager是一個完全重新設計,並且把我們的程式多合一封裝的一個軟體。它是DVDVideoSoft發展出來針對多媒體應用的免費程式,可分為8個部分。包括 YouTube、MP3&Audio、CD-DVD-BD、DVD&Video、Photo&Images、Mobiles、Apple Devices、3D。因此,所有的程式包括在一個新的介面,讓大家更容易使用。
使用這個免費軟體,您可以在不同的格式中轉換您的影片和聲音檔案,並且放置到 iPod、PSP、iPhone、BlackBerry或是其他行動裝置上;燒錄和抓取DVD或聲音CD;上傳或是下載YouTube的影片或音樂到iPod、PSP、iPhone、BlackBerry上;以及使用基本的聲音、影片檔案編輯功能,像是錄影和擷取畫面。
Free Studio 並不含spyware或adware。它的執行與安裝是安全並且完全免費的!
--
包了45個工具轉換唷,真是猛到不行~~
2012年1月3日 星期二
vfp excel to dbc
連線字串:
DBQ=D:\test.xls;DefaultDir=D:\;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;FIL=excel 8.0;FILEDSN=C:\Program Files\Common Files\ODBC\Data Sources\test.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID
DBQ=D:\test.xls;DefaultDir=D:\;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;FIL=excel 8.0;FILEDSN=C:\Program Files\Common Files\ODBC\Data Sources\test.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID
char、nchar、varchar、nvarchar,對比那個好
引用:
--
資料庫定義到char類型的欄位時,不知道大家是否會猶豫一下,到底選char、nchar、varchar、nvarchar、text、ntext中哪一種呢?結果很可能是兩種,一種是節儉人士的選擇:最好是用定長的,感覺比變長能省些空間,而且處理起來會快些,無法定長只好選用定長,並且將長度設置盡可能地小;另一種是則是覺得無所謂,儘量用可變類型的,長度儘量放大些。
鑒於現在硬體像蘿蔔一樣便宜的大好形勢,糾纏這樣的小問題實在是沒多大意義,不過如果不弄清它,總覺得對不起勞累過度的CPU和硬碟。
下面開始了(以下說明只針對SqlServer有效):
1、當使用非unicode時慎用以下這種查詢:
select f from t where f = N'xx'
原因:無法利用到索引,因為資料庫會將f先轉換到unicode再和N'xx'比較
2、char 和相同長度的varchar處理速度差不多(後面還有說明)
3、varchar的長度不會影響處理速度!!!(看後面解釋)
4、索引中列總長度最多支援總為900位元組,所以長度大於900的varchar、char和大於450的nvarchar,nchar將無法創建索引。
5、text、ntext上是無法創建索引的。
6、O/R Mapping中對應實體的屬性類型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性來說,可變長度的類型更加吻合。
7、一般基礎資料表中的name在實際查詢中基本上全部是使用like '%xx%'這種方式,而這種方式是無法利用索引的,所以如果對於此種欄位,索引建了也白建。
8、其他一些像remark的欄位則是根本不需要查詢的,所以不需要索引。
9、varchar的存放和string是一樣原理的,即length {block}這種方式,所以varchar的長度和它實際佔用空間是無關的。
10、對於固定長度的欄位,是需要額外空間來存放NULL標識的,所以如果一個char欄位中出現非常多的NULL,那麼很不幸,你的佔用空間比沒有NULL的大(但這個大並不是大太多,因為NULL標識是用bit存放的,可是如果你一行中只有你一個NULL需要標識,那麼你就白白浪費1byte空間了,罪過罪過!),這時候,你可以使用特殊標識來存放,如:'NV'。
11、同上,所以對於這種NULL查詢,索引是無法生效的,假如你使用了NULL標識替代的話,那麼恭喜你,你可以利用到索引了。
12、char和varchar的比較成本是一樣的,現在關鍵就看它們的索引查找的成本了,因為查找策略都一樣,因此應該比較誰佔用空間小。在存放相同數量的字元情況下,如果數量小,那麼char佔用長度是小於varchar的,但如果數量稍大,則varchar完全可能小於char,而且要看實際填充數值的充實度,比如說varchar(3)和char(3),那麼理論上應該是char快了,但如果是char(10)和varchar(10),充實度只有30%的情況下,理論上就應該是varchar快了。因為varchar需要額外空間存放塊長度,所以只要length(1-fillfactor)大於這個存放空間(好像是2位元組),那麼它就會比相同長度的char快了。
13、nvarchar比varchar要慢上一些,而且對於非unicode字元它會佔用雙倍的空間,那麼這麼一種類型推出來是為什麼呢?對,就是為了國際化,對於unicode類型的資料,排序規則對它們是不起作用的,而非unicode字元在處理不同語言的資料時,必須指定排序規則才能正常工作,所以n類型就這麼一點好處。
總結陳詞:
1、如果資料量非常大,又能100%確定長度且保存只是ansi字元,那麼char。
2、能確定長度又不一定是ansi字元或者,那麼用nchar;
3、不確定長度,要查詢且希望利用索引的話,用nvarchar類型吧,將它們設到400;
4、不查詢的話沒什麼好說的,用nvarchar(4000)。
5、性格豪爽的可以只用3和4,偶爾用用1,畢竟這是一種額外說明,等於告訴別人說,我一定需要長度為X位元的數據。
--
資料庫定義到char類型的欄位時,不知道大家是否會猶豫一下,到底選char、nchar、varchar、nvarchar、text、ntext中哪一種呢?結果很可能是兩種,一種是節儉人士的選擇:最好是用定長的,感覺比變長能省些空間,而且處理起來會快些,無法定長只好選用定長,並且將長度設置盡可能地小;另一種是則是覺得無所謂,儘量用可變類型的,長度儘量放大些。
鑒於現在硬體像蘿蔔一樣便宜的大好形勢,糾纏這樣的小問題實在是沒多大意義,不過如果不弄清它,總覺得對不起勞累過度的CPU和硬碟。
下面開始了(以下說明只針對SqlServer有效):
1、當使用非unicode時慎用以下這種查詢:
select f from t where f = N'xx'
原因:無法利用到索引,因為資料庫會將f先轉換到unicode再和N'xx'比較
2、char 和相同長度的varchar處理速度差不多(後面還有說明)
3、varchar的長度不會影響處理速度!!!(看後面解釋)
4、索引中列總長度最多支援總為900位元組,所以長度大於900的varchar、char和大於450的nvarchar,nchar將無法創建索引。
5、text、ntext上是無法創建索引的。
6、O/R Mapping中對應實體的屬性類型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性來說,可變長度的類型更加吻合。
7、一般基礎資料表中的name在實際查詢中基本上全部是使用like '%xx%'這種方式,而這種方式是無法利用索引的,所以如果對於此種欄位,索引建了也白建。
8、其他一些像remark的欄位則是根本不需要查詢的,所以不需要索引。
9、varchar的存放和string是一樣原理的,即length {block}這種方式,所以varchar的長度和它實際佔用空間是無關的。
10、對於固定長度的欄位,是需要額外空間來存放NULL標識的,所以如果一個char欄位中出現非常多的NULL,那麼很不幸,你的佔用空間比沒有NULL的大(但這個大並不是大太多,因為NULL標識是用bit存放的,可是如果你一行中只有你一個NULL需要標識,那麼你就白白浪費1byte空間了,罪過罪過!),這時候,你可以使用特殊標識來存放,如:'NV'。
11、同上,所以對於這種NULL查詢,索引是無法生效的,假如你使用了NULL標識替代的話,那麼恭喜你,你可以利用到索引了。
12、char和varchar的比較成本是一樣的,現在關鍵就看它們的索引查找的成本了,因為查找策略都一樣,因此應該比較誰佔用空間小。在存放相同數量的字元情況下,如果數量小,那麼char佔用長度是小於varchar的,但如果數量稍大,則varchar完全可能小於char,而且要看實際填充數值的充實度,比如說varchar(3)和char(3),那麼理論上應該是char快了,但如果是char(10)和varchar(10),充實度只有30%的情況下,理論上就應該是varchar快了。因為varchar需要額外空間存放塊長度,所以只要length(1-fillfactor)大於這個存放空間(好像是2位元組),那麼它就會比相同長度的char快了。
13、nvarchar比varchar要慢上一些,而且對於非unicode字元它會佔用雙倍的空間,那麼這麼一種類型推出來是為什麼呢?對,就是為了國際化,對於unicode類型的資料,排序規則對它們是不起作用的,而非unicode字元在處理不同語言的資料時,必須指定排序規則才能正常工作,所以n類型就這麼一點好處。
總結陳詞:
1、如果資料量非常大,又能100%確定長度且保存只是ansi字元,那麼char。
2、能確定長度又不一定是ansi字元或者,那麼用nchar;
3、不確定長度,要查詢且希望利用索引的話,用nvarchar類型吧,將它們設到400;
4、不查詢的話沒什麼好說的,用nvarchar(4000)。
5、性格豪爽的可以只用3和4,偶爾用用1,畢竟這是一種額外說明,等於告訴別人說,我一定需要長度為X位元的數據。
sql create default
參考MSDN
--
建立和綁定:
create default df_null as ('') --建預設值
sp_bindefault 'df_null','bbb.formula' --綁定
卸除預設值和刪除預設值:
exec sp_unbindefault 'bbb.formula'
drop default df_null
--
建立和綁定:
create default df_null as ('') --建預設值
sp_bindefault 'df_null','bbb.formula' --綁定
卸除預設值和刪除預設值:
exec sp_unbindefault 'bbb.formula'
drop default df_null
完整移除 vs 2010
參考來源
--
下載 MICROSOFT VISUAL STUDIO 2010 UNINSTALL UTILITY
另建捷徑後,在後面加入參數 /full /netfx
--
會移除,是因實在不知問題出在哪兒;受不了
無法併存 vs 2008 , 但測同事的都可以
只要有開 vs 2008 , vs 2010 (F5) 就失效 ; 查看環境設定都無效
移除後,再安裝看看了
能看到問題的是,vs 2010 新建專案後,按F5 都要強制儲存(本項就怪怪了)
結果存後,按F5連動都不會動
唯:移除乾淨後,再安裝看看了
--
2012/1/5 記錄:
1.重新安裝 vs 2010 + sp1 後,一樣出現之前發表的一篇 vs 2010 不允許要求的登錄使用權
這個問題,採用一樣解決方式! (其實應該是OS本影響所導致)
2.啟定 vs 2010 再試是否能F5 , 哈! 是了,這樣就對了
開專案,要F5 已不會強制要先儲存了;正確是這樣沒錯
以上,若有人跟我一樣的狀況;可以參考一下我的方式唷! 希望有所幫助
--
下載 MICROSOFT VISUAL STUDIO 2010 UNINSTALL UTILITY
另建捷徑後,在後面加入參數 /full /netfx
--
會移除,是因實在不知問題出在哪兒;受不了
無法併存 vs 2008 , 但測同事的都可以
只要有開 vs 2008 , vs 2010 (F5) 就失效 ; 查看環境設定都無效
移除後,再安裝看看了
能看到問題的是,vs 2010 新建專案後,按F5 都要強制儲存(本項就怪怪了)
結果存後,按F5連動都不會動
唯:移除乾淨後,再安裝看看了
--
2012/1/5 記錄:
1.重新安裝 vs 2010 + sp1 後,一樣出現之前發表的一篇 vs 2010 不允許要求的登錄使用權
這個問題,採用一樣解決方式! (其實應該是OS本影響所導致)
2.啟定 vs 2010 再試是否能F5 , 哈! 是了,這樣就對了
開專案,要F5 已不會強制要先儲存了;正確是這樣沒錯
以上,若有人跟我一樣的狀況;可以參考一下我的方式唷! 希望有所幫助
免費Flash 相簿SimpleViewer
官網 simpleviewer
--
現官網有4項:
1.SimpleViewer is a free
2.TiltViewer is a free
3.AutoViewer is a free
4.PostcardViewer is a free
這都是採用php 寫法 , 操作GUI很酷 ; 值得學習這GUI模式
--
現官網有4項:
1.SimpleViewer is a free
2.TiltViewer is a free
3.AutoViewer is a free
4.PostcardViewer is a free
這都是採用php 寫法 , 操作GUI很酷 ; 值得學習這GUI模式
2012年1月2日 星期一
SQL Server 2008 R2 包裝:自動安裝
請參考微軟:How to: Install SQL Server 2008 R2 from the Command Prompt
從命令提示字元安裝 SQL Server 2008 R2
在 SQL Server 容錯移轉叢集上安裝用戶端工具
使用 ConfigurationFile.ini 組態檔來安裝 SQL Server 2008 R2;自動安裝(Unattended Installation)
--
sql 2005:
start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER ADDLOCAL=SQL_Engine,Client_Components SECURITYMODE=SQL SAPWD=test
sql 2008r2:
Setup.exe /q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="" /SQLSVCPASSWORD="" /SQLSYSADMINACCOUNTS="" /AGTSVCACCOUNT="NT AUTHORITY\Network Service" /IACCEPTSQLSERVERLICENSETERMS
Developer or Standard Edition of SQL Server 2008 R2:
setup.exe /FEATURES=Tools /Q /INDICATEPROGRESS /ACTION=Install /INSTANCENAME=MSSQLSERVER /BROWSERSVCSTARTUPTYPE=Automatic /AGTSVCACCOUNT=”NT AUTHORITY\NETWORK SERVICE” /IACCEPTSQLSERVERLICENSETERMS
SQL Server 2008 R2 Express Edition (database engine only):
setup.exe /FEATURES=SQLEngine /Q /INDICATEPROGRESS /ACTION=Install /INSTANCENAME=SQLEXPRESS /BROWSERSVCSTARTUPTYPE=Automatic /AGTSVCACCOUNT=”NT AUTHORITY\NETWORK SERVICE” /SQLSYSADMINACCOUNTS=”BUILTIN\Users” /IACCEPTSQLSERVERLICENSETERMS
從命令提示字元安裝 SQL Server 2008 R2
在 SQL Server 容錯移轉叢集上安裝用戶端工具
使用 ConfigurationFile.ini 組態檔來安裝 SQL Server 2008 R2;自動安裝(Unattended Installation)
--
sql 2005:
start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER ADDLOCAL=SQL_Engine,Client_Components SECURITYMODE=SQL SAPWD=test
sql 2008r2:
Setup.exe /q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="
Developer or Standard Edition of SQL Server 2008 R2:
setup.exe /FEATURES=Tools /Q /INDICATEPROGRESS /ACTION=Install /INSTANCENAME=MSSQLSERVER /BROWSERSVCSTARTUPTYPE=Automatic /AGTSVCACCOUNT=”NT AUTHORITY\NETWORK SERVICE” /IACCEPTSQLSERVERLICENSETERMS
SQL Server 2008 R2 Express Edition (database engine only):
setup.exe /FEATURES=SQLEngine /Q /INDICATEPROGRESS /ACTION=Install /INSTANCENAME=SQLEXPRESS /BROWSERSVCSTARTUPTYPE=Automatic /AGTSVCACCOUNT=”NT AUTHORITY\NETWORK SERVICE” /SQLSYSADMINACCOUNTS=”BUILTIN\Users” /IACCEPTSQLSERVERLICENSETERMS
對datagridview進行新增,修改,刪除的操作
引用來源
--
真是猛,對小的資料量 ;可以使用此法,但量大....就實在
C#
--
private Boolean dbUpdate()
{
string strSql = "select ProductsSpecID,ProductsSpec,ProductsSpecUnit,ProductsID from tbl_product_detail_master";
System.Data.DataTable dtUpdate = new System.Data.DataTable();
dtUpdate = this.dbconn(strSql);
dtUpdate.Rows.Clear();
System.Data.DataTable dtShow = new System.Data.DataTable();
//dtShow = (DataTable)this.bindSource.DataSource;
dtShow = (System.Data.DataTable)this.dgselect.DataSource;
int p1 = dtShow.Rows.Count;
// try
// {
for (int i = 0; i < dtShow.Rows.Count; i++)
{
DataRowState rowState=new DataRowState();
rowState=dtShow.Rows[i].RowState;
if (rowState==DataRowState.Added || rowState==DataRowState.Detached || rowState==DataRowState.Modified)
{
if (this.dgselect["Del", i].Value.ToString() == "1")
{
dtShow.Rows[i].Delete();
}
}
}
for (int i = 0; i < dtShow.Rows.Count; i++)
{
dtUpdate.ImportRow(dtShow.Rows[i]);
}
int num = dtUpdate.Rows.Count;
try
{
this.conn.Open();
trans = this.conn.BeginTransaction();
MySqlCommandBuilder CommandBuiler;
CommandBuiler = new MySqlCommandBuilder(this.adapter);
this.adapter.Update(dtUpdate);
trans.Commit();
this.conn.Close();
}
catch ( Exception ex)
{
MessageBox.Show(ex.Message.ToString());
trans.Rollback();
return false;
}
dtUpdate.AcceptChanges();
return true;
}
VB
--
Private Function dbUpdate() As Boolean
Dim strSql As String = "select ProductsSpecID,ProductsSpec,ProductsSpecUnit,ProductsID from tbl_product_detail_master"
Dim dtUpdate As System.Data.DataTable = New System.Data.DataTable
dtUpdate = Me.dbconn(strSql)
dtUpdate.Rows.Clear
Dim dtShow As System.Data.DataTable = New System.Data.DataTable
'dtShow = (DataTable)this.bindSource.DataSource;
dtShow = CType(Me.dgselect.DataSource,System.Data.DataTable)
Dim p1 As Integer = dtShow.Rows.Count
' try
' {
Dim i As Integer = 0
Do While (i < dtShow.Rows.Count)
Dim rowState As DataRowState = New DataRowState
rowState = dtShow.Rows(i).RowState
If ((rowState = DataRowState.Added) _
OrElse ((rowState = DataRowState.Detached) _
OrElse (rowState = DataRowState.Modified))) Then
If (Me.dgselect("Del", i).Value.ToString = "1") Then
dtShow.Rows(i).Delete
End If
End If
i = (i + 1)
Loop
Dim i As Integer = 0
Do While (i < dtShow.Rows.Count)
dtUpdate.ImportRow(dtShow.Rows(i))
i = (i + 1)
Loop
Dim num As Integer = dtUpdate.Rows.Count
Try
Me.conn.Open
trans = Me.conn.BeginTransaction
Dim CommandBuiler As MySqlCommandBuilder
CommandBuiler = New MySqlCommandBuilder(Me.adapter)
Me.adapter.Update(dtUpdate)
trans.Commit
Me.conn.Close
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
trans.Rollback
Return false
End Try
dtUpdate.AcceptChanges
Return true
End Function
--
真是猛,對小的資料量 ;可以使用此法,但量大....就實在
C#
--
private Boolean dbUpdate()
{
string strSql = "select ProductsSpecID,ProductsSpec,ProductsSpecUnit,ProductsID from tbl_product_detail_master";
System.Data.DataTable dtUpdate = new System.Data.DataTable();
dtUpdate = this.dbconn(strSql);
dtUpdate.Rows.Clear();
System.Data.DataTable dtShow = new System.Data.DataTable();
//dtShow = (DataTable)this.bindSource.DataSource;
dtShow = (System.Data.DataTable)this.dgselect.DataSource;
int p1 = dtShow.Rows.Count;
// try
// {
for (int i = 0; i < dtShow.Rows.Count; i++)
{
DataRowState rowState=new DataRowState();
rowState=dtShow.Rows[i].RowState;
if (rowState==DataRowState.Added || rowState==DataRowState.Detached || rowState==DataRowState.Modified)
{
if (this.dgselect["Del", i].Value.ToString() == "1")
{
dtShow.Rows[i].Delete();
}
}
}
for (int i = 0; i < dtShow.Rows.Count; i++)
{
dtUpdate.ImportRow(dtShow.Rows[i]);
}
int num = dtUpdate.Rows.Count;
try
{
this.conn.Open();
trans = this.conn.BeginTransaction();
MySqlCommandBuilder CommandBuiler;
CommandBuiler = new MySqlCommandBuilder(this.adapter);
this.adapter.Update(dtUpdate);
trans.Commit();
this.conn.Close();
}
catch ( Exception ex)
{
MessageBox.Show(ex.Message.ToString());
trans.Rollback();
return false;
}
dtUpdate.AcceptChanges();
return true;
}
VB
--
Private Function dbUpdate() As Boolean
Dim strSql As String = "select ProductsSpecID,ProductsSpec,ProductsSpecUnit,ProductsID from tbl_product_detail_master"
Dim dtUpdate As System.Data.DataTable = New System.Data.DataTable
dtUpdate = Me.dbconn(strSql)
dtUpdate.Rows.Clear
Dim dtShow As System.Data.DataTable = New System.Data.DataTable
'dtShow = (DataTable)this.bindSource.DataSource;
dtShow = CType(Me.dgselect.DataSource,System.Data.DataTable)
Dim p1 As Integer = dtShow.Rows.Count
' try
' {
Dim i As Integer = 0
Do While (i < dtShow.Rows.Count)
Dim rowState As DataRowState = New DataRowState
rowState = dtShow.Rows(i).RowState
If ((rowState = DataRowState.Added) _
OrElse ((rowState = DataRowState.Detached) _
OrElse (rowState = DataRowState.Modified))) Then
If (Me.dgselect("Del", i).Value.ToString = "1") Then
dtShow.Rows(i).Delete
End If
End If
i = (i + 1)
Loop
Dim i As Integer = 0
Do While (i < dtShow.Rows.Count)
dtUpdate.ImportRow(dtShow.Rows(i))
i = (i + 1)
Loop
Dim num As Integer = dtUpdate.Rows.Count
Try
Me.conn.Open
trans = Me.conn.BeginTransaction
Dim CommandBuiler As MySqlCommandBuilder
CommandBuiler = New MySqlCommandBuilder(Me.adapter)
Me.adapter.Update(dtUpdate)
trans.Commit
Me.conn.Close
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
trans.Rollback
Return false
End Try
dtUpdate.AcceptChanges
Return true
End Function
Microsoft SQL Server 2008 R2集成SP1的方法
引用來源
--
Microsoft SQL Server 2008 R2集成SP1的方法,這個指導用的是英文版SQL Server ,但如果您獲取正確的服務包的語言版本,適合任何語言的 SQL Server。
1. 複製您的SQL Server 2008的原始安裝媒體到 E:\SQL2008R2_ENU
2. 這如下三個架構的Service Pack 1都應該被包含:
SQLServer2008R2SP1-KB2528583-IA64-ENU.exe
SQLServer2008R2SP1-KB2528583-x64-ENU.exe
SQLServer2008R2SP1-KB2528583-x86-ENU.exe
3. 解包如下:
E:\SQLR2SP1\SQLServer2008R2SP1-KB2528583-IA64-ENU.exe /x:E:\SQL2008R2_ENU\SP
E:\SQLR2SP1\SQLServer2008R2SP1-KB2528583-x64-ENU.exe /x:E:\SQL2008R2_ENU\SP
E:\SQLR2SP1\SQLServer2008R2SP1-KB2528583-x86-ENU.exe /x:E:\SQL2008R2_ENU\SP
確保完成這個步驟對所有的架構,以確保原始媒體能夠正確更新。
4. 複製 Setup.exe 提取的協調股的位置原始來源媒體位置
E:\SQL2008R2_ENU\SP E:\SQL2008R2_ENU Setup.exe
5. 複製所有文件而不是文件夾, 除了Microsoft.SQL.Chainer.PackageData.dll ,從 E:\SQL2008R2_ENU\SP\ 到 E:\SQL2008R2_ENU\ 來更新原始檔案。
robocopy E:\SQL2008R2_ENU\SP\x86 E:\SQL2008R2_ENU\x86 /XF Microsoft.SQL.Chainer.PackageData.dll
robocopy E:\SQL2008R2_ENU\SP\x64 E:\SQL2008R2_ENU\x64 /XF Microsoft.SQL.Chainer.PackageData.dll
robocopy E:\SQL2008R2_ENU\SP\ia64 E:\SQL2008R2_ENU\ia64 /XF Microsoft.SQL.Chainer.PackageData.dll
注意:如果您不小心複製Microsoft.SQL.Chainer.PackageData.dll文件,當您啟動的Setup.exe 可能會看到此錯誤。 如果發生這種情況,恢復Microsoft.SQL.Chainer.PackageData.dll回原來的版本。
6. 確定您是否擁有defaultsetup.ini在下列地點:
E:\SQL2008R2_ENU\x86
E:\SQL2008R2_ENU\x64
E:\SQL2008R2_ENU\ia64
如果你有一個defaultsetup.ini ,增加下列內容到PCUSOURCE=」.\SP」 ,如下:
PCUSOURCE=".\SP"
備註:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX為安裝序列號,用你的序列號代替即可
如果您沒有defaultsetup.ini ,創建一個具有下列內容:
;SQLSERVER2008 R2 Configuration File
[SQLSERVER2008]
PID="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
PCUSOURCE=".\SP"
並複製到下列地點:
E:\SQL2008R2_ENU\x86
E:\SQL2008R2_ENU\x64
E:\SQL2008R2_ENU\ia64
該文件會告訴安裝程序在哪裡找到SP1的源媒體,既您在第3步中提取的內容。
7.現在像平時那樣運行Setup.exe。
--
Microsoft SQL Server 2008 R2集成SP1的方法,這個指導用的是英文版SQL Server ,但如果您獲取正確的服務包的語言版本,適合任何語言的 SQL Server。
1. 複製您的SQL Server 2008的原始安裝媒體到 E:\SQL2008R2_ENU
2. 這如下三個架構的Service Pack 1都應該被包含:
SQLServer2008R2SP1-KB2528583-IA64-ENU.exe
SQLServer2008R2SP1-KB2528583-x64-ENU.exe
SQLServer2008R2SP1-KB2528583-x86-ENU.exe
3. 解包如下:
E:\SQLR2SP1\SQLServer2008R2SP1-KB2528583-IA64-ENU.exe /x:E:\SQL2008R2_ENU\SP
E:\SQLR2SP1\SQLServer2008R2SP1-KB2528583-x64-ENU.exe /x:E:\SQL2008R2_ENU\SP
E:\SQLR2SP1\SQLServer2008R2SP1-KB2528583-x86-ENU.exe /x:E:\SQL2008R2_ENU\SP
確保完成這個步驟對所有的架構,以確保原始媒體能夠正確更新。
4. 複製 Setup.exe 提取的協調股的位置原始來源媒體位置
E:\SQL2008R2_ENU\SP E:\SQL2008R2_ENU Setup.exe
5. 複製所有文件而不是文件夾, 除了Microsoft.SQL.Chainer.PackageData.dll ,從 E:\SQL2008R2_ENU\SP\ 到 E:\SQL2008R2_ENU\ 來更新原始檔案。
robocopy E:\SQL2008R2_ENU\SP\x86 E:\SQL2008R2_ENU\x86 /XF Microsoft.SQL.Chainer.PackageData.dll
robocopy E:\SQL2008R2_ENU\SP\x64 E:\SQL2008R2_ENU\x64 /XF Microsoft.SQL.Chainer.PackageData.dll
robocopy E:\SQL2008R2_ENU\SP\ia64 E:\SQL2008R2_ENU\ia64 /XF Microsoft.SQL.Chainer.PackageData.dll
注意:如果您不小心複製Microsoft.SQL.Chainer.PackageData.dll文件,當您啟動的Setup.exe 可能會看到此錯誤。 如果發生這種情況,恢復Microsoft.SQL.Chainer.PackageData.dll回原來的版本。
6. 確定您是否擁有defaultsetup.ini在下列地點:
E:\SQL2008R2_ENU\x86
E:\SQL2008R2_ENU\x64
E:\SQL2008R2_ENU\ia64
如果你有一個defaultsetup.ini ,增加下列內容到PCUSOURCE=」.\SP」 ,如下:
PCUSOURCE=".\SP"
備註:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX為安裝序列號,用你的序列號代替即可
如果您沒有defaultsetup.ini ,創建一個具有下列內容:
;SQLSERVER2008 R2 Configuration File
[SQLSERVER2008]
PID="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
PCUSOURCE=".\SP"
並複製到下列地點:
E:\SQL2008R2_ENU\x86
E:\SQL2008R2_ENU\x64
E:\SQL2008R2_ENU\ia64
該文件會告訴安裝程序在哪裡找到SP1的源媒體,既您在第3步中提取的內容。
7.現在像平時那樣運行Setup.exe。
MSSQL 2008 R1+SP1 Express
微軟官網
--
這是只有一個安裝,內包了R2+SP1 ; 且還包了Management Tools 了唷
-
引用: (詳細請參考微軟官網)
SQL Server 2008 R2 SP1 Express 的三個版本:
SQL Server 2008 R2 Express with Tools
支援開發的 Express 核心版本。包含 SQL Server 2008 Database Engine 和 SQL Server Management Studio Express。
SQL Server 2008 R2 Express with Advanced Services
擴充 SQL Server 2008 Express with Tools,以支援整合式全文檢索搜尋和 Reporting Services
SQL Server 2008 R2 Express (僅限執行階段)
只包含 SQL Database Engine,設計用於部署和 ISV 轉散發
SQL Server 2008 R2 SP1 Management Studio Express
免費、易於使用的圖形化管理工具,適合用於設定及管理 SQL Server 2008 R2 SP1 Express。它也會管理 SQL Server 2008 R2 SP1 任何版本建立的 SQL Server Database Engine 執行個體。
--
這是只有一個安裝,內包了R2+SP1 ; 且還包了Management Tools 了唷
-
引用: (詳細請參考微軟官網)
SQL Server 2008 R2 SP1 Express 的三個版本:
SQL Server 2008 R2 Express with Tools
支援開發的 Express 核心版本。包含 SQL Server 2008 Database Engine 和 SQL Server Management Studio Express。
SQL Server 2008 R2 Express with Advanced Services
擴充 SQL Server 2008 Express with Tools,以支援整合式全文檢索搜尋和 Reporting Services
SQL Server 2008 R2 Express (僅限執行階段)
只包含 SQL Database Engine,設計用於部署和 ISV 轉散發
SQL Server 2008 R2 SP1 Management Studio Express
免費、易於使用的圖形化管理工具,適合用於設定及管理 SQL Server 2008 R2 SP1 Express。它也會管理 SQL Server 2008 R2 SP1 任何版本建立的 SQL Server Database Engine 執行個體。
文字檔比對 WinMerge (GNU)
官網
--
文字檔比對工具,如果有兩個文字檔的內容需要比對,利用它一次開啟兩個檔案後,
會分別顯示在左右兩邊的分割視窗,相異之處會以亮度標示的方法顯示,
方便於程式或文字內容的檢查及修改,支援 Unicode。
--
文字檔比對工具,如果有兩個文字檔的內容需要比對,利用它一次開啟兩個檔案後,
會分別顯示在左右兩邊的分割視窗,相異之處會以亮度標示的方法顯示,
方便於程式或文字內容的檢查及修改,支援 Unicode。
2012年1月1日 星期日
VisualBasicPowerPacks 10
若有安裝 vs 2010 可在底下目錄找到:
1.VisualBasicPowerPacks10Setup.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\VBPowerPacks\zh-Hans
2.Microsoft.VisualBasic.PowerPacks.Vs.dll
在 C:\Program Files (x86)\Reference Assemblies\Microsoft\VBPowerPacks\v10.0
1.VisualBasicPowerPacks10Setup.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\VBPowerPacks\zh-Hans
2.Microsoft.VisualBasic.PowerPacks.Vs.dll
在 C:\Program Files (x86)\Reference Assemblies\Microsoft\VBPowerPacks\v10.0
訂閱:
文章 (Atom)