VB.NET 導出數據到EXCEL中

VB.NET 導出數據到EXCEL中
[日期:2007-07-29] 來源: 作者: [字體:大 中 小]


 ----------VB.NET 導出數據到Excel中-------------

Dim oExcel As New Excel.Application
Dim obook As Excel.Workbook
Dim oSheet As Excel.Worksheet
Dim DataArray(2000, 2000) As Integer
 
 
 
 
obook = oExcel.Workbooks.Open("c:/1.xls")
oSheet = obook.Worksheets(1)
oSheet.Name = "ok"
Dim myAdapter As New OleDb.OleDbDataAdapter("select * from list", Module1.dbConn)
Dim myDataSet As New DataSet
myAdapter.Fill(myDataSet, "list")
DataGrid1.DataSource = myDataSet.Tables("list")
Dim i As Integer
Dim iCount As Integer
iCount = myDataSet.Tables("list").Rows.Count
For i = 0 To iCount - 1
DataArray(i, 0) = DataGrid1.Item(i, 0)
Next
oSheet.Range("b1").Resize(100, 1).Value = DataArray
obook.Save()
oExcel.Quit()

添加數據到Excel的行(列),源數據的數組要與Excel的行(列)對應。

上面代碼使用的是DataGrid的控件,如果使用Table也是一樣一樣的哦


數組大小可以自己來定義,如果數據的數量大於數組的範圍,那麼以數組爲準(誰叫要用數組輸出呢 :-))

第一次寫blog,有什麼寫得不對的,高手請指點了

--------------完-------------------------------

 

 

使用vb.net連接到數據庫並執行命令。
[日期:2007-07-29] 來源: 作者: [字體:大 中 小]


 Imports System
Imports System.Data ’引入數據類庫
Imports System.Data.SqlClient ’引入SQL Server類庫(用來訪問SQL Server)

Module Module1
 Sub Main()
 
 
 
 
AddRecord() ’增加記錄
RemoveRecord() ’刪除記錄
Pause()
 End Sub

 Sub Pause()
Console.WriteLine("Press Enter To Continue...")
Console.ReadLine()
 End Sub

 Sub AddRecord()
’定義連接字符串
Dim sConnectionString As String _
 = "User ID=sa;Initial Catalog=pubs;Data Source=(local)"
’定義一個SQL連接對象
Dim objConn As New SqlConnection(sConnectionString)
’連接對象
objConn.Open()
’定義一個插入記錄命令字符
Dim sSQL As String = "INSERT INTO Employee " & _
 "(emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)" & _
 "VALUES (’MSD12923F’, ’Duncan’, ’W’, ’Mackenzie’, " & _
 "10, 82,’0877’,’2001-01-01’)"

Dim objCmd As New SqlCommand(sSQL, objConn)
Try
 objCmd.ExecuteNonQuery() ’執行插入動作
Catch e As Exception
 Console.WriteLine(e.Message) ’無法執行時提示出錯信息
End Try
Console.WriteLine("Record Added")
 End Sub

 Sub RemoveRecord()
Dim sConnectionString As String _
 = "User ID=sa;Initial Catalog=pubs;Data Source=(local)"
Dim objConn As New SqlConnection(sConnectionString)
objConn.Open()
Dim sSQL As String = "DELETE FROM Employee WHERE emp_id = @emp_id"
Dim objCmd As New SqlCommand(sSQL, objConn)

objCmd.Parameters.Add("@emp_id", SqlDbType.Char, 9)
objCmd.Parameters.Item("@emp_id").Value = "MSD12923F"

Try
 objCmd.ExecuteNonQuery()
 Console.WriteLine("Record Deleted")
Catch e As Exception
 Console.WriteLine(e.ToString)
End Try
Console.ReadLine()
 End Sub

End Module

 


如何將Access導入到SQL2005
[日期:2008-08-27] 來源: 作者: [字體:大 中 小]

方法一:
 在命令提示符窗口中運行 DTSWizard.exe
 SQL Server 導入和導出嚮導提供了生成 Microsoft SQL Server 2005 Integration Services (SSIS) 包最簡單的方法。SQL Server 導入和導出嚮導可以訪問各種數據源。可以向下列源複製數據或從其中複製數據:
 Microsoft SQL Server
 文本文件
 Microsoft Office Access
 Microsoft Office Excel
 其他 OLE DB 訪問接口
 此外,可以只使用 ADO.NET 訪問接口和 ODBC 數據源作爲源。
 啓動 SQL Server 導入和導出嚮導
 在 Business Intelligence Development Studio 中,右鍵單擊“SSIS 包”文件夾,再單擊“SSIS 導入和導出嚮導”。
 - 或 -
 在 Business Intelligence Development Studio 中的“項目”菜單上,單擊“SSIS 導入和導出嚮導”。
 - 或 -
 在 SQL Server Management Studio 中,連接到數據庫引擎服務器類型,展開數據庫,右鍵單擊一個數據庫,指向“任務”,再單擊“導入數據”或“導出數據”。
 - 或 -
 在命令提示符窗口中運行 DTSWizard.exe(位於 C:/Program Files/Microsoft SQL Server/90/DTS/Binn)。

 方法二:
 執行 sql 查詢:
 EXEC sp_configure 'show advanced options', 1;
 GO
 RECONFIGURE;
 GO
 EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
 GO
 RECONFIGURE;
 GO
 INSERT INTO 表名(字段1,字段2,字段3)
 SELECT 字段1,字段2,字段3
 FROM opendatasource( 'Microsoft.Jet.OLEDB.4.0',’Data Source="d:/Ilovedezai.mdb";Jet
 OLEDB:Database Password=密碼')...表名

 

 

VB.NET操作SQL Server完全模塊
[日期:2007-11-28] 來源:cnitblog.com/MTSIT 作者:未知 [字體:大 中 小]

Module ModSql

Function GetIntByStr(ByVal FieldName As String, ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "select Top 1 " & FieldName & " from " & TableName & " where " & ParaName & "='" & ParaValue & "'"

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), 0, sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

 

End Function

 

Function GetIntByInt(ByVal FieldName As String, ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As Integer) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "select Top 1 " & FieldName & " from " & TableName & " where " & ParaName & "=" & ParaValue & ""

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), 0, sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetStrByStr(ByVal FieldName As String, ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As String) As String

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "select Top 1 " & FieldName & " from " & TableName & " where " & ParaName & "='" & ParaValue & "'"

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As String = ""

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), "", sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return Trim(rowsAffected)

End Function

 

Function GetStrByInt(ByVal FieldName As String, ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As Integer) As String

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "select Top 1 " & FieldName & " from " & TableName & " where " & ParaName & "=" & ParaValue & ""

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As String = ""

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), "", sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return Trim(rowsAffected)

End Function

 

Function GetBitByStr(ByVal FieldName As String, ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As String) As Boolean

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "select Top 1 " & FieldName & " from " & TableName & " where " & ParaName & "='" & ParaValue & "'"

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Boolean = False

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), False, sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetBitByInt(ByVal FieldName As String, ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As Integer) As Boolean

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "select Top 1 " & FieldName & " from " & TableName & " where " & ParaName & "=" & ParaValue & ""

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Boolean = False

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), False, sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetDateByInt(ByVal FieldName As String, ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As Integer) As DateTime

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "select Top 1 " & FieldName & " from " & TableName & " where " & ParaName & "=" & ParaValue & ""

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As DateTime

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), DateAdd(DateInterval.Year, -100, Date.Now), sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetDateByStr(ByVal FieldName As String, ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As String) As DateTime

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "select Top 1 " & FieldName & " from " & TableName & " where " & ParaName & "='" & ParaValue & "'"

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As DateTime

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), DateAdd(DateInterval.Year, -100, Date.Now), sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function DelByInt(ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As Integer) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "DELETE FROM " & TableName & " WHERE " & ParaName & " =" & ParaValue

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function DelByStr(ByVal TableName As String, ByVal ParaName As String, ByVal ParaValue As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "DELETE FROM " & TableName & " WHERE " & ParaName & "='" & ParaValue & "'"

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

Function DelBySQL(ByVal StrSQL As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = StrSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

Function UpdateBitBySQL(ByVal TableName As String, ByVal DataFieldName As String, ByVal DataFieldValue As Boolean, ByVal ParaSQL As String) As String

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "UPDATE " & TableName & " SET " & DataFieldName & " = " & IIf(DataFieldValue = True, 1, 0) & " WHERE " & ParaSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

sqlConnection.Open()

Try

sqlCommand.ExecuteNonQuery()

Return ""

Catch ex As Exception

Return ex.Message

Finally

sqlConnection.Close()

End Try

End Function

Function UpdateStrByInt(ByVal TableName As String, ByVal DataFieldName As String, ByVal DataFieldValue As String, ByVal Para As String, ByVal ParaValue As Integer) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "UPDATE " & TableName & " SET " & DataFieldName & " = '" & DataFieldValue & "' WHERE " & Para & " = " & ParaValue

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function UpdateStrByStr(ByVal TableName As String, ByVal DataFieldName As String, ByVal DataFieldValue As String, ByVal Para As String, ByVal ParaValue As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "UPDATE " & TableName & " SET " & DataFieldName & " = '" & DataFieldValue & "' WHERE " & Para & " = '" & ParaValue & "'"

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function UpdateIntByInt(ByVal TableName As String, ByVal DataFieldName As String, ByVal DataFieldValue As Integer, ByVal Para As String, ByVal ParaValue As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "UPDATE " & TableName & " SET " & DataFieldName & " = " & DataFieldValue & " WHERE " & Para & " = " & ParaValue

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function UpdateIntByStr(ByVal TableName As String, ByVal DataFieldName As String, ByVal DataFieldValue As Integer, ByVal Para As String, ByVal ParaValue As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "UPDATE " & TableName & " SET " & DataFieldName & " = " & DataFieldValue & " WHERE " & Para & " = '" & ParaValue & "'"

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

 

Function UpdateIntBySQL(ByVal TableName As String, ByVal DataFieldName As String, ByVal DataFieldValue As Integer, ByVal ParaSQL As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "UPDATE " & TableName & " SET " & DataFieldName & " = " & DataFieldValue & " WHERE " & ParaSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

Function UpdateStrBySQL(ByVal TableName As String, ByVal DataFieldName As String, ByVal DataFieldValue As String, ByVal ParaSQL As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "UPDATE " & TableName & " SET " & DataFieldName & " = '" & DataFieldValue & "' WHERE " & ParaSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function UpdateBySQL(ByVal TableName As String, ByVal SetSQL As String, ByVal ParaSQL As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "UPDATE " & TableName & " SET " & SetSQL & " WHERE " & ParaSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteNonQuery

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetDataTableByFormat(ByVal vRecordNumber As Integer, ByVal ItemSQL As String, ByVal TableName As String, ByVal ParaSQL As String) As System.Data.DataTable

 

Dim RecordNumber As String

If vRecordNumber = 0 Then

RecordNumber = ""

Else

RecordNumber = "TOP " & vRecordNumber

End If

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "SELECT " & RecordNumber & " " & ItemSQL & " FROM " & TableName & " where " & ParaSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim dataAdapter As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter(sqlCommand)

Dim DataSet As System.Data.DataSet = New System.Data.DataSet

Try

dataAdapter.Fill(DataSet)

Return DataSet.Tables(0)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

End Function

 

Function GetDataTableBySQL(ByVal SuperSQL As String) As System.Data.DataTable

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(SuperSQL, sqlConnection)

 

Dim dataAdapter As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter(sqlCommand)

Dim DataSet As System.Data.DataSet = New System.Data.DataSet

Try

dataAdapter.Fill(DataSet)

Return DataSet.Tables(0)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

End Function

 

Function GetMaxField(ByVal TableName As String, ByVal FieldName As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "SELECT MAX(" & FieldName & ") AS MaxField FROM " & TableName

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), 0, sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetMinField(ByVal TableName As String, ByVal FieldName As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "SELECT Min(" & FieldName & ") AS MaxField FROM " & TableName

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer = 0

sqlConnection.Open()

Try

rowsAffected = IIf(IsDBNull(sqlCommand.ExecuteScalar), 0, sqlCommand.ExecuteScalar)

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetFieldCount(ByVal TableName As String, ByVal ParaSQL As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "SELECT COUNT(*) AS FieldCount FROM " & TableName & " where " & ParaSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteScalar

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetFieldSumByInt(ByVal TableName As String, ByVal FieldName As String, ByVal ParaSQL As String) As Integer

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "SELECT isnull(sum(" & FieldName & "),0) AS CountNumber FROM " & TableName & " where " & ParaSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Integer

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteScalar

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function GetFieldSumByDec(ByVal TableName As String, ByVal FieldName As String, ByVal ParaSQL As String) As Decimal

 

Dim sqlConnection As New SqlClient.SqlConnection(GetConn)

 

Dim queryString As String = "SELECT isnull(sum(" & FieldName & "),0) AS CountNumber FROM " & TableName & " where " & ParaSQL

Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)

 

Dim rowsAffected As Decimal

sqlConnection.Open()

Try

rowsAffected = sqlCommand.ExecuteScalar

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

Finally

sqlConnection.Close()

End Try

 

Return rowsAffected

End Function

 

Function ChgFieldByLeftWord(ByVal TableName As String, ByVal FieldName As String, ByVal ParaWord As String, ByVal NewWord As String) As Integer

Try

Return UpdateBySQL(TableName, FieldName & "='" & NewWord & "'+right(" & FieldName & ",len(" & FieldName & ")-" & Len(ParaWord) & ")", "Len(" & FieldName & ")>=" & Len(ParaWord) & " and left(" & FieldName & "," & Len(ParaWord) & ")='" & ParaWord & "'")

Catch ex As Exception

Throw New NotSupportedException(ex.Message)

End Try

End Function

 

'數據庫連接串

Private Function GetConn() As String

Return "server=localhost;database=pubs;uid=sa;pwd="

End Function

End Module


<%@ Import Namespace="System.Data" %>
<%@ Import NameSpace="System.Data.OleDb" %>
<script laguage="VB" runat="server">
Dim myConnection As OleDbConnection
Dim myCommand As OleDbCommand
sub page_load(sender as Object,e as EventArgs)
'1.連接數據庫
dim dbname as string
dbname=server.mappath("authors.mdb")
myConnection = New OleDbConnection( "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source="&dbname )
myConnection.Open()
la1.text="Connection Opened!"

'2.添加記錄
myCommand = New OleDbCommand( "Insert INTO Authors(Authors,country) Values('Simson','usa')", myConnection )
myCommand.ExecuteNonQuery()
la2.text="New Record Inserted!"

'3 更新數據(Access)
myCommand = New OleDbCommand( "Update Authors SET Authors='Bennett' Where Authors = 'Simson'", myConnection )
myCommand.ExecuteNonQuery()
la3.text="Record Updated!"

'4 刪除數據(access)
myCommand = New OleDbCommand( "Delete FROM Authors Where Authors = 'David'", myConnection )
myCommand.ExecuteNonQuery()
la4.text="Record Deleted!"

'5 使用DateGrid顯示數據
myCommand = New OleDbCommand( "select * FROM Authors", myConnection )
MyDataGrid.DataSource=myCommand.Executereader()
MyDataGrid.DataBind()

end sub
</script>
<html>
<body>
<asp:label id="la1" runat="server" /><br>
<asp:label id="la2" runat="server" /><br>
<asp:label id="la3" runat="server" /><br>
<asp:label id="la4" runat="server" /><br>
<ASP:DataGrid id="MyDataGrid" runat="server"
BorderColor="black"
BorderWidth="1"
GridLines="Both"
CellPadding="3"
CellSpacing="0"
Font-Name="Verdana"
Font-Size="10pt"
HeaderStyle-BackColor="#aaaadd"
AlternatingItemStyle-BackColor="#eeeeee"
>
</asp:DataGrid>

</body>
</html>


 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
 <title>直接將Access數據庫導入到Excel文件</title>
 </head>
 <body>
 <form id="form1" runat="server">
 <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="到處數據" />
 </form>
 </body>
 </html>
 VB.NET
 
 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
 Dim sql As String
 Dim connstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/ASPNET20Book.mdb;Persist Security Info=True"
 Dim cn As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(connstr)
 Dim cmd As System.Data.OleDb.OleDbCommand
 cn.Open
 sql = "select Count(*) From Paging"
 cmd = New System.Data.OleDb.OleDbCommand(sql, cn)
 Dim RecordCount As Integer = CType(cmd.ExecuteScalar, Integer)
 sql = "select top 65535 * into [Excel 8.0;database=" + Server.MapPath(".") + "/ASPNET20Book.xls].[Sheet1] from Paging"
 cmd = New System.Data.OleDb.OleDbCommand(sql, cn)
 cmd.ExecuteNonQuery
 cn.Close
 cn.Dispose
 cn = Nothing
 End Sub

 


Visual Basic.NET訪問數據方法
[日期:2007-07-20] 來源: 作者: [字體:大 中 小]

 

 VB.NET作爲VB的升級語言,提供了比VB更加強大的功能。它是一種完全面向對象的編程語言。微軟對其進行了很大的改進。ADO在Visual Basic.NET中不再直接支持。訪問數據有了新的變化,比以前複雜多了。籤於大家比較熟悉ADO,且ADO的確簡單、方便、適用。固本人利用ADO編寫的訪問目前市面上最廣泛使用的數據庫。現在接合Visual Basic.NET強大的類開發功能,本人把ADO訪問數據的方法編成組件,完全封裝起來,以方便大家的使用。方法如下:

 啓動Visual Studio.NET。在新建項目中選擇Visual Basic項目,在模板中選擇類庫,在名稱中輸入類庫名稱如DataAccess.確定後,則進入類庫開發環境中,把Class1換名爲ADOAccess。

 在項目菜單中加入引用,選擇COM頁,找到 Microsoft ActionX Data Object 20 Library 或更高版本確定。COM是Microsoft爲了區分現在的.net,兼容以前的開發方式而設置的,凡是.net之前的組成件都可在COM頁中可找到。(Microsoft ActionX Data Object 20 Library是Microsoft提供的ADO組件。它極大地方便了數據庫的訪問,是開發數據庫有關軟件的最實用的工具之一)

 在類名上面寫上Imports ADODB.Connection Imports ADODB.Recordset ,Imports ADODB.CursorLocationEnum, Imports System.DBNull 4條引用語句,這裏分別是引用ADO,ADO的宏定義,空值函數的來源。

 在類中定義一局部連接對象變量。 Private mCnnDB As New ADODB.Connection()
然後定義連接Access數據庫的過程. Access 數據庫是Microsoft開發的本地數據庫,用adUseClient指定。它通過Microsoft.Jet.OLEDB數據訪問方式訪問數據庫,Microsoft.Jet.OLEDB又有多種版本,其中4.0是最高版本,它能訪問ACCESS 2000,所以這裏的數據提供者指定爲Microsoft.Jet.OLEDB.4.0。指定了本地數據庫和提供者後,就可打開一個數據庫了,用open方法實現。完整的代碼如下:

''作用: 連接Access數據庫
''參數: DBName 數據庫名
Public Sub ConnAccess(ByVal DBName As String)
Dim strDB As String
mCnnDB.CursorLocation = adUseClient
mCnnDB.Provider = "Microsoft.Jet.OLEDB.4.0"
mCnnDB.Open(DBName, "Admin")
End Sub

 ODBC是一種廣泛使用的連接多種數據庫的方法,有萬能鑰匙之功效,但它需要通過ODBC先建立一個DNS,這裏不作詳細說明.有了DNS就可訪問所連接的數據庫。訪問ODBC時先指明提供者,提供者只能爲Microsoft 命名的MSDASQL,然後通過連接字符串指定數據源,用戶名和密碼,在下面的ConnectionString中指定,最後用open打開。由於ODBC分有用戶名和無用戶名兩者,我們必須分別實現,藉助類的函數名重載功能,我們編寫兩個同名的過程,完整的代碼如下:

''作用: 連接ODBC數據庫(不需指定用戶和密碼 )
''參數:dsnName爲ODBC名
Public Sub ConnODBC(ByVal dsnName As String)
mCnnDB.Provider = "MSDASQL"
mCnnDB.ConnectionString = "Data Source=''" & dsnName & "''"
mCnnDB.Open()
End Sub

''作用: 連接ODBC數據庫(需指定用戶和密碼 )
''參數:dsnName ODBC名,UserID 用戶名,UserPwd 用戶密碼
Public Sub ConnODBC(ByVal dsnName As String, ByVal UserID As String, ByVal UserPwd As String)
mCnnDB.Provider = "MSDASQL"
mCnnDB.ConnectionString = "Data Source=''" & dsnName & "''User ID=''" & _
UserID & "'';" & "Password=''" & UserPwd & "
mCnnDB.Open()
End Sub


 SQL Server數據庫是Microsoft開發的一種廣泛使用的後臺數據庫。訪問SQL Server可以通過指明ODBC驅動程序爲SQL Server來實現,即在連接字符串中要有driver={SQL Server},由於它是後臺數據庫,所以必須指明SQL Server所在的計算機名,通常把它稱爲服務器,下面的ServerName就說明這點,然後指明是連接哪個數據庫。其它的類似上面的ODBC。SQL Server的用戶分爲WIN NT 和授權用戶,WIN NT用戶是不需要指定用戶名和密碼的超級用戶,否則要指明用戶名和密碼,這責定於SQL Server數據庫管理員,在此不作詳細說明,完整的代碼如下:

''作用: 連接SQL Server數據庫
''參數:ServerName 服務器名,DBName 數據庫名
Public Sub ConnSQLServer(ByVal ServerName As String, ByVal DBName As String)
With mCnnDB
.ConnectionString = "uid=;pwd= ;driver={SQL Server};" & _
"server=" & ServerName & _
";database=" & DBName
.Open()
End With
End Sub
''作用: 連接SQL Server數據庫
''參數:ServerName 服務器名,DBName 數據庫名,UserID 用戶名,UserPwd 用戶密碼
Public Sub ConnSQLServer(ByVal ServerName As String, ByVal DBName As String,ByVal UserID As String, ByVal UserPwd As String)
With mCnnDB
.ConnectionString = "uid=’” & UserID & “’;pwd=’” & UserPwd & _
”’;driver={SQL Server};" & "server=" & ServerName & _
";database=" & DBName
.Open()
End With
End Sub

 Oracle數據庫是目前最有影響的一種廣泛使用的後臺數據庫。訪問Oracle先指明其提供者MSDAORA。Oracle與Sql Server不同的是它不是通過數據庫來管理的,所以它不需指明數據庫,但它連接時必須指明用戶,即使是超級用戶也如此,這是它的安全性能高於Sql Server的理現之一,所以我們只須編寫一個過程。其它類似。完整的代碼如下:

''作用: 連接Oracle數據庫
''參數:ServerName 服務器名,DBName 數據庫名,UserID 用戶名,UserPwd 用戶密碼
Public Sub ConnOracle(ByVal ServerName As String, ByVal UserID As String, ByVal UserPwd As String)
With mCnnDB
.Provider = "MSDAORA"
.ConnectionString = "User ID=''" & UserID & "'';" & "Password=''" & UserPwd & _
"'';" & "Data Source=''" & ServerName & "''"
.Open()
End With
End Sub

 有了上面的連接數據庫的方法,我們就直接可讀寫數據了。下面利用ADO擴充讀寫數據的函數。

 ADO在訪問表時要指明其光標類型和鎖類型,且指定不同其權限就不同,權限分爲讀寫二種,這裏我們編寫的是有讀寫權限的通用的函數,所以我們指定光標CursorType爲adOpenKeyset,鎖爲開鎖adLockOptimistic,.net需指明其來源,這是爲什麼開始要有 “Imports ADODB.CursorLocationEnum”語句的原因。有了這些,就可通過執行查詢語句來打開一個表。打開表後,我們判斷表是否爲空表,不是則移動記錄至尾後再現移至記錄頭(這是爲了可以訪問其中每條記錄,特別是用RecordCount求記錄數時不至有時返回-1的關鍵),最後返回一個記錄集,完整的代碼如下:

''作用:連接表
''參數:TableName表名
''返回:記錄集
Public Function OpenTable(ByVal TableName) As ADODB.Recordset
Dim strSql As String
Dim rec As ADODB.Recordset
rec = New ADODB.Recordset()
rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
strSql = "SELECT * FROM " & TableName
rec.Open(strSql, mCnnDB) ''打開記錄集
If Not rec.EOF Then
rec.MoveLast()
rec.MoveFirst()
End If
OpenTable = rec
End Function

 下面是擴充上面函數的功能,可以跟據條件訪問單個表。

Public Overloads Function OpenTable(ByVal TableName As String, ByVal strWhere As String) As ADODB.Recordset
Dim strSql As String
Dim rec As ADODB.Recordset
rec = New ADODB.Recordset()
rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
strSql = "SELECT * FROM " & TableName & " where " & strWhere
rec.Open(strSql, mCnnDB) ''打開記錄集
If Not rec.EOF Then
rec.MoveLast()
rec.MoveFirst()
End If
Return rec
End Function

 我們繼續擴充訪問表的功能。有時要打開多個表,讀寫其中的數據,我們可以通過建立查詢視圖實現,其它類似上面的OpenTable,完整的代碼如下:

''作用:連接多表
''參數:strSQL
''返回:記錄集
Public Function ExecuteSQL(ByVal strSql As String) As ADODB.Recordset
Dim rec As New ADODB.Recordset()
rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
rec.Open(strSql, mCnnDB) ''打開記錄集
ExecuteSQL = rec
End Function


 下面編寫了一個用記錄集填充AxMSFlexGrid網格的過程。其中函數RecordCount是我自己編寫的求記錄集中記錄數據的函數。這裏不能直接用ADO的RecordCount求得。如果記錄集是空,則退出過程。否則求出記錄集的記錄數和字段數據用來確定AxMSFlexGrid網格的行列數據,然後讀出記錄集的數據直接填充到AxMSFlexGrid網格。要說明的是讀出記錄集的數據時要先判斷是否爲空值,由函數IsDBNull實現(函數IsDBNull來源於System.DBNull).最後記錄集應該返回到記錄首位,否則影響了原有的記錄集,完整的代碼如下:

''作用:用記錄集的數據填充網格
''參數:MSGrid 網格對象,rec 記錄集對象
Public Sub FillMsGrid(ByVal MSGrid As AxMSFlexGridLib.AxMSFlexGrid, ByVal rec As ADODB.Recordset)
Dim i, j, RecordNum As Integer
If rec.EOF Then Exit Sub
RecordNum = RecordCount(rec)
MSGrid.Rows = RecordNum + 1
MSGrid.Cols = rec.Fields.Count + 1
For i = 0 To RecordNum - 1
For j = 0 To rec.Fields.Count - 1
If IsDBNull(rec(j).value) Then
MSGrid.set_TextMatrix(i + 1, j + 1, "")
Else
MSGrid.set_TextMatrix(i + 1, j + 1, rec(j).value)
End If
Next
MSGrid.set_TextMatrix(i + 1, 0, i)
rec.MoveNext()
Next
rec.MoveFrist()
End Sub
''作用:取記錄集的記錄數
''參數:rec 記錄集對象
''返回:記錄集的記錄數

Public Function RecordCount(ByVal rec As ADODB.Recordset) As Integer
Dim i As Integer
If rec.EOF Then
RecordCount = 0
Exit Function
End If
With rec
.MoveFirst()
Do While Not .EOF
i += 1
.MoveNext()
Loop
.MoveFirst()
End With
RecordCount = i
End Function

 以上代碼編好後放在所定義的類中.下面的省略號代表上面的函數和過程。可直接生成爲DLL組件。方法是在.net編輯環境下選擇生成菜單中按生成就生成了DLL文件。然後,你可以直接調用該組件了。

Imports ADODB.Connection
Imports ADODB.Recordset
Imports ADODB.CursorLocationEnum
Imports System.DBNull ‘函數IsDBNull的來源
Class ADOAccess
Private mCnnDB As New ADODB.Connection()

End Class

 調用上面生成的組件方法如下:在Visual Basic.NET中建立一項目,在窗口Form1中加入一AxMSFlexGrid網格命名爲MsGrid1,然後引用剛建立的Dll。方法是選擇項目菜單的添加引用,選擇項目頁,按瀏覽找到其DLL文件確定後引用完成。在Form1中定義一ADOAccess對象,在Load事件中編寫調用代碼,分別測試其功能,代碼如下:

Public Class Form1
Inherits System.Windows.Forms.Form
Dim DB As New ADOAccess()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim rec As New ADODB.Recordset()
''DB.ConnAccess("e:/test.mdb")
''DB.ConnSQLServer("wj-1058", "test")
''DB.ConnODBC("testODBC")
''DB.ConnOracle("wj-1059", "system", "manager")
''rec = DB.OpenTable("DEMO.customer")
rec = DB.OpenTable("doc_file")
DB.FillMsGrid(MSGrid1, rec)
End Sub

 說明:

 1.你的機上要有Access數據庫文件(e:/test.mdb),MS Server數據庫中有數據庫test,doc_file 爲其test中的表,Oracle數據庫中有表DEMO.customer。
 
 2. wj-1058爲MS Server服務器名,wj-1059爲Oracle服務器名,"system", "manager"分別爲用戶名及口令。

 3. 一次僅連接一種數據庫。以上程序在Visual Studio.NET中調試通過。

 總結:

 上面方法介紹了剛面世不久的Visual Basic.NET中有關數據庫的開發,ADO在Visual Basic.NET中的應用,連接幾種最實用的數據庫,且介紹了編寫組件的方法。利用該知識極大地方便了軟件開發者訪問數據的能力,提高了開發效率。

 


Visual Basic.NET中使用ADO訪問數據庫
[日期:2007-07-20] 來源: 作者: [字體:大 中 小]


 .NET中以 ADO.NET取代以前的ADO。用慣ADO的程序員怎樣在.NET中怎樣應用ADO呢?本人經過不斷的摸索,發現在.NET中ADO一樣可以用,並且很好用。現在結合Visual Basic.NET強大的類開發功能,本人將ADO開發成組件使用,效果非常理想。我使用的方法如下:

 啓動Visual Studio.NET。在新建項目中選擇Visual Basic項目,在模板中選擇類庫,在名稱中輸入類庫名稱如DataAccess.確定後,則進入類庫開發環境中,把Class1換名爲ADOAccess。

 在項目菜單中加入引用,選擇COM頁,找到 Microsoft ActionX Data Object 20 Library 或更高版本。COM選項是Microsoft爲了區分現在的.NET,兼容以前的開發方式而設置的,凡是.NET之前的組件都可在COM頁中可找到。

 在類名上面寫上Imports ADODB.Connection; Imports ADODB.Recordset ;Imports ADODB.CursorLocationEnum; Imports System.DBNull 4條引用語句,這裏分別是引用ADO,ADO的宏定義,設置空值函數的來源。

 在類中定義一局部連接對象變量。 Private mCnnDB As New ADODB.Connection()
然後定義連接Access數據庫的過程. Access 數據庫用adUseClient指定,通過Microsoft.Jet.OLEDB數據訪問方式訪問數據庫,Microsoft.Jet.OLEDB又有多種版本,其中4.0是最高版本,它能訪問ACCESS 2000,所以這裏的數據提供者指定爲Microsoft.Jet.OLEDB.4.0。指定了本地數據庫和提供者後,就可打開一個數據庫了,用open方法實現。完整的代碼如下:

''作用: 連接Access數據庫
''參數: DBName 數據庫名
Public Sub ConnAccess(ByVal DBName As String)
Dim strDB As String
mCnnDB.CursorLocation = adUseClient
mCnnDB.Provider = "Microsoft.Jet.OLEDB.4.0"
mCnnDB.Open(DBName, "Admin")
End Sub

 在ODBC中設置DNS,在下面的ConnectionString中指定用戶名和密碼,最後用open方法打開。由於ODBC分有用戶名和無用戶名兩者,我們必須分別實現,藉助類的函數名重載功能,我們編寫兩個同名的過程,完整的代碼如下:

''作用: 連接ODBC數據庫(不需指定用戶和密碼 )
''參數:dsnName爲ODBC名
Public Sub ConnODBC(ByVal dsnName As String)
mCnnDB.Provider = "MSDASQL"
mCnnDB.ConnectionString = "Data Source=''" & dsnName & "''"
mCnnDB.Open()
End Sub

''作用: 連接ODBC數據庫(需指定用戶和密碼 )
''參數:dsnName ODBC名,UserID 用戶名,UserPwd 用戶密碼
Public Sub ConnODBC(ByVal dsnName As String, ByVal UserID As String, ByVal UserPwd As String) mCnnDB.Provider = "MSDASQL"
mCnnDB.ConnectionString = "Data Source=''" & dsnName & "''User ID=''" & UserID & "'';" & _
"Password=''" & UserPwd & "
mCnnDB.Open()
End Sub


 SQL Server數據庫是Microsoft開發的一種廣泛使用的後臺數據庫。訪問SQL Server可以通過指明ODBC驅動程序爲SQL Server來實現,即在連接字符串中要有driver={SQL Server},由於它是後臺數據庫,所以必須指明SQL Server所在的計算機名,通常把它稱爲服務器,下面的ServerName就說明這點,然後指明是連接哪個數據庫。其它的類似上面的ODBC。SQL Server的用戶分爲WIN NT 和授權用戶,WIN NT用戶是不需要指定用戶名和密碼的超級用戶,否則要指明用戶名和密碼,這決定於SQL Server數據庫管理員,在此不作詳細說明,完整的代碼如下:


''作用: 連接SQL Server數據庫
''參數:ServerName 服務器名,DBName 數據庫名
Public Sub ConnSQLServer(ByVal ServerName As String, ByVal DBName As String)
With mCnnDB
.ConnectionString = "uid=;pwd= ;driver={SQL Server};" & _
"server=" & ServerName & _
";database=" & DBName
.Open()
End With
End Sub
''作用: 連接SQL Server數據庫
''參數:ServerName 服務器名,DBName 數據庫名,UserID 用戶名,UserPwd 用戶密碼
Public Sub ConnSQLServer(ByVal ServerName As String, ByVal DBName As String,ByVal UserID As String, ByVal UserPwd As String)
With mCnnDB
.ConnectionString = "uid=''" & UserID & "'';pwd=''" & UserPwd &"'';driver={SQL Server};" & _
"server=" & ServerName & _
";database=" & DBName
.Open()
End With
End Sub
 

 Oracle數據庫是目前最有影響的一種廣泛使用的後臺數據庫。訪問Oracle先指明其提供者MSDAORA。Oracle與Sql Server不同的是它不是通過數據庫來管理的,所以它不需指明數據庫,但它連接時必須指明用戶,即使是超級用戶也如此,這是它的安全性能高於Sql Server的理現之一,所以我們只須編寫一個過程。其它類似。完整的代碼如下:


''作用: 連接Oracle數據庫
''參數:ServerName 服務器名,DBName 數據庫名,UserID 用戶名,UserPwd 用戶密碼
Public Sub ConnOracle(ByVal ServerName As String, ByVal UserID As String, ByVal UserPwd As String)
With mCnnDB
.Provider = "MSDAORA"
.ConnectionString = "User ID=''" & UserID & "'';" & _
"Password=''" & UserPwd & "'';" & _
"Data Source=''" & ServerName & "''"
.Open()
End With
End Sub

 連結數據庫後,就可以利用ADO擴充讀寫數據的函數。

 ADO在訪問表時要指明其光標類型和鎖類型,且指定其讀寫權限,這裏我們編寫的是有讀寫權限的通用的函數,所以我們指定光標CursorType爲adOpenKeyset,鎖爲adLockOptimistic,.NET需指明其來源,這是爲什麼開始要有 "Imports ADODB.CursorLocationEnum"語句的原因。有了這些,就可通過執行查詢語句來打開一個表。打開表後,我們判斷表是否爲空表,不是則移動記錄至尾後再現移至記錄頭(這是爲了可以訪問其中每條記錄,特別是用RecordCount求記錄數時不至於返回-1的關鍵),最後返回一個記錄集,完整的代碼如下:


''作用:連接表
''參數:TableName表名
''返回:記錄集
Public Function OpenTable(ByVal TableName) As ADODB.Recordset
Dim strSql As String
Dim rec As ADODB.Recordset
rec = New ADODB.Recordset()
rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
strSql = "SELECT * FROM " & TableName
rec.Open(strSql, mCnnDB) ''打開記錄集
If Not rec.EOF Then
rec.MoveLast()
rec.MoveFirst()
End If
OpenTable = rec
End Function

 下面是擴充上面函數的功能,可以跟據條件訪問單個表。


Public Overloads Function OpenTable(ByVal TableName As String, ByVal strWhere As String) As ADODB.Recordset
Dim strSql As String
Dim rec As ADODB.Recordset
rec = New ADODB.Recordset()
rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
strSql = "SELECT * FROM " & TableName & " where " & strWhere
rec.Open(strSql, mCnnDB) ''打開記錄集
If Not rec.EOF Then
rec.MoveLast()
rec.MoveFirst()
End If
Return rec
End Function

 繼續擴充訪問表的功能。有時要打開多個表,讀寫其中的數據,我們可以通過建立查詢視圖實現,其它類似上面的OpenTable,完整的代碼如下:


''作用:連接多表
''參數:strSQL
''返回:記錄集
Public Function ExecuteSQL(ByVal strSql As String) As ADODB.Recordset
Dim rec As New ADODB.Recordset()
rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
rec.Open(strSql, mCnnDB) ''打開記錄集
ExecuteSQL = rec
End Function


 下面編寫了一個用記錄集填充AxMSFlexGrid網格的過程。其中函數RecordCount是我自己編寫的求記錄集中記錄的函數。這裏不能直接用ADO的RecordCount求得。如果記錄集是空,則退出過程。否則求出記錄集的記錄數和字段來確定AxMSFlexGrid網格的行列數據,然後讀出記錄集的數據直接填充到AxMSFlexGrid網格。要說明的是讀出記錄集的數據時要先判斷是否爲空值,由函數IsDBNull實現(函數IsDBNull來源於System.DBNull).最後記錄集應該返回到記錄首位,否則影響了原有的記錄集,完整的代碼如下:


''作用:用記錄集的數據填充網格
''參數:MSGrid 網格對象,rec 記錄集對象
Public Sub FillMsGrid(ByVal MSGrid As AxMSFlexGridLib.AxMSFlexGrid, ByVal rec As ADODB.Recordset)
Dim i, j, RecordNum As Integer
If rec.EOF Then Exit Sub
RecordNum = RecordCount(rec)
MSGrid.Rows = RecordNum + 1
MSGrid.Cols = rec.Fields.Count + 1
For i = 0 To RecordNum - 1
For j = 0 To rec.Fields.Count - 1
If IsDBNull(rec(j).Value) Then
MSGrid.set_TextMatrix(i + 1, j + 1, "")
Else
MSGrid.set_TextMatrix(i + 1, j + 1, rec(j).Value)
End If
Next
MSGrid.set_TextMatrix(i + 1, 0, i)
rec.MoveNext()
Next
rec.MoveFrist()
End Sub
''作用:取記錄集的記錄數
''參數:rec 記錄集對象
''返回:記錄集的記錄數

Public Function RecordCount(ByVal rec As ADODB.Recordset) As Integer
Dim i As Integer
If rec.EOF Then
RecordCount = 0
Exit Function
End If
With rec
.MoveFirst()
Do While Not .EOF
i += 1
.MoveNext()
Loop
.MoveFirst()
End With
RecordCount = i
End Function
 

 以上代碼編好後放在所定義的類中.下面的省略號代表上面的函數和過程。可直接生成爲DLL組件。方法是在.NET編輯環境下選擇生成菜單中按生成就生成了DLL文件。然後,你可以直接調用該組件了。


Imports ADODB.Connection
Imports ADODB.Recordset
Imports ADODB.CursorLocationEnum
Imports System.DBNull ''函數IsDBNull的來源
Class ADOAccess
Private mCnnDB As New ADODB.Connection()

End Class

 調用上面生成的組件方法如下:在Visual Basic.NET中建立一項目,在窗口Form1中加入一AxMSFlexGrid網格命名爲MsGrid1,佈置如下

 然後引用剛建立的Dll。方法是選擇項目菜單的添加引用,選擇項目頁,按瀏覽找到其DLL文件確定後引用完成。在Form1中定義一ADOAccess對象,在Load事件中編寫調用代碼,分別測試其功能,代碼如下:


Public Class Form1
Inherits System.Windows.Forms.Form
Dim DB As New ADOAccess()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim rec As New ADODB.Recordset()
''DB.ConnAccess("e:/test.mdb")
''DB.ConnSQLServer("wj-1058", "test")
''DB.ConnODBC("testODBC")
''DB.ConnOracle("wj-1059", "system", "manager")
''rec = DB.OpenTable("DEMO.customer")
rec = DB.OpenTable("doc_file")
DB.FillMsGrid(MSGrid1, rec)
End Sub

 說明:

 1.你的機上要有Access數據庫文件(e:/test.mdb),MS Server數據庫中有數據庫test,doc_file 爲test中的表,Oracle數據庫中有表DEMO.customer

 2. wj-1058爲MS Server服務器名,wj-1059爲Oracle服務器名,"system", "manager"分別爲用戶名及口令。

 3. 一次僅連接一種數據庫。

 以上程序在Visual Studio.NET中調試通過。 

 總結:上面方法介紹了剛面世不久的Visual Basic.NET中有關數據庫的開發,ADO在Visual Basic.NET中的應用,連接幾種最實用的數據庫,且介紹了編寫組件的方法。
 

 


導入Excel電子表格數據到SQL Sever數據庫的方法
[日期:2007-07-22] 來源: 作者: [字體:大 中 小]

完整代碼如下:
 
 <%
 'On Error Resume Next
 '導入Excel電子表格數據到SQL Sever數據庫 By Dicky 2004-12-27 16:41:12
 Function Open_Conn(SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName,SqlConn)
 '創建數據庫連接對象並打開數據庫連接
 Dim ConnStr
 'SQL Server數據庫連接參數:數據庫名、用戶密碼、用戶名、連接名(本地用local,外地用IP)
 ConnStr = "Provider=Sqloledb; User ID=" & SqlUsername & "; Password=" & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source=" & SqlLocalName & ";"
 Set SqlConn = Server.CreateObject("ADODB.Connection")
 SqlConn.Open ConnStr
 If Err Then
   Err.Clear
   Set SqlConn = Nothing
   Response.Write "數據連接錯誤!"
   Response.End
 End If
 End Function
 
 Function Close_Conn(SqlConn)
 '關閉數據庫連接並清除數據庫連接對象
 If IsObject(SqlConn) Then
   SqlConn.Close
   Set SqlConn = Nothing
 End If
 End Function
 
 Call Open_Conn("Shat_EDG","","sa","(local)",SqlConn) '打開本地SQL Server數據庫連接
 Call Open_Conn("Shat_EDG","","sa","ssh03",SqlConn1) '打開遠程SQL Server數據庫連接
 
 Function Get_EMP_CnName(NTACCNT)
 '根據用戶NT帳號得到用戶中文名
 Dim Sql1,Rs1
 Sql1 = "Select EMP_CNAME From RF_EMPLOYEE Where EMP_NTACCNT='"&NTACCNT&"'"
 Set Rs1 = Server.CreateObject("Adodb.RecordSet")
 Rs1.Open Sql1,SqlConn1,1,1
 If Rs1.Eof Then
   Get_EMP_CnName = ""
 Else
   Get_EMP_CnName = Rs1("EMP_CNAME")
 End If
 Rs1.Close
 Set Rs1 = Nothing
 End Function %>
 <html>
 <head>
 <title>導入Excel電子表格數據到SQL Sever數據庫</title>
 <body bgcolor="#ACD9AF">
 <center><b>導入Excel電子表格數據到SQL Sever數據庫</b></center>
 <FORM METHOD="POST" name="form1">
 請選擇數據源(本地庫):
 <SELECT NAME="Table" title="請選擇需要導入數據的表">
 <option></option>
 <% Dim RsSqlDatabaseTable
 Set RsSqlDatabaseTable = SqlConn.OpenSchema(20)
 Do While Not RsSqlDatabaseTable.Eof %>
 <option<%If Trim(Request("Table"))=RsSqlDatabaseTable(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable(2)%></option>
 <% RsSqlDatabaseTable.MoveNext:Loop
 Set RsSqlDatabaseTable = Nothing %>
 </SELECT><input type=submit name=submit value="開始導出">
 <br>請選擇目標表(遠程庫):
 <SELECT NAME="Table1" title="請選擇需要導入數據的表">
 <option></option>
 <% Dim RsSqlDatabaseTable1
 Set RsSqlDatabaseTable1 = SqlConn1.OpenSchema(20)
 Do While Not RsSqlDatabaseTable1.Eof %>
 <option<%If Trim(Request("Table1"))=RsSqlDatabaseTable1(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable1(2)%></option>
 <% RsSqlDatabaseTable1.MoveNext:Loop
 Set RsSqlDatabaseTable1 = Nothing %>
 </SELECT>
 </FORM>
 <font color=blue>導出過程中請不要刷新頁面!</font><br>
 <%
 If Trim(Request("Table1")) <> "" Then
 Dim Sql,Rs
 Sql = "Select * From Sheet1$" 'Sheet1$是我們實現用SQL Server自身數據轉換功能得到的表名
 Set Rs = SqlConn.Execute(Sql)
 If Rs.Eof And Rs.Bof Then
   Response.write "沒有找到您需要的數據!!<br>"
 Else
   Do While Not Rs.Eof
   SqlInsert = "Insert Into "&Trim(Request("Table1"))&" (EDG_Project_Name,EDG_Project_No,EDG_Project_VM,EDG_Project_VM_CnName,EDG_Project_M,EDG_Project_M_CnName,EDG_Project_Director,EDG_Project_Director_CnName) Values ('"&Trim(Rs("工程名稱"))&"','"&Trim(Rs("工程編號"))&"','"&Trim(Rs("項目副理"))&"','"&Trim(Rs("項目副理"))&"("&Get_EMP_CnName(Trim(Rs("項目副理")))&")"&"','"&Trim(Rs("項目經理"))&"','"&Trim(Rs("項目經理"))&"("&Get_EMP_CnName(Trim(Rs("項目經理")))&")"&"','"&Trim(Rs("項目總監"))&"','"&Trim(Rs("項目總監"))&"("&Get_EMP_CnName(Trim(Rs("項目總監")))&")"&"')"
 ' Response.Write SqlInsert
   '此處插入的值根據實際數據庫結構進行調整
   SqlConn1.Execute(SqlInsert)'插入Excel表格裏所有東東
   Rs.MoveNext
   Loop
   Response.Write "<font color=red>恭喜,成功導出數據!^_^</font><br>"
 End If
 
 Rs.Close
 Set Rs = Nothing
 End If
 
 Call Close_Conn(SqlConn) '關閉Excel數據庫連接
 Call Close_Conn(SqlConn1) '關閉SQL Server數據庫連接 %>
 </body>
 </html>

 


<%@ Page Language="VB" Debug="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
 Dim TimeString As String = DateTime.Now.Ticks.ToString()
 Dim a As UInt32 = UInt32.Parse(TimeString.Substring(TimeString.Length - 8, 8))
 Dim b As Int32 = BitConverter.ToInt32(BitConverter.GetBytes(a), 0)
 Dim rnd As Random = New Random(b)
 Dim intRandomNumber As Integer = rnd.Next
 Response.Write(intRandomNumber)
 Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|aspxWeb.mdb;Persist Security Info=True"
 Dim sql As String = "select top 10 Title,objectGuid from Document Order By Rnd(" + (-1 * intRandomNumber).ToString() + "*id)"
 Dim cn As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(ConnectionString)
 cn.Open()
 Dim cmd As System.Data.OleDb.OleDbCommand = New System.Data.OleDb.OleDbCommand(sql, cn)
 Dim dr As System.Data.OleDb.OleDbDataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
 GridView1.DataSource = dr
 GridView1.DataBind()
 dr.Close()
 cmd.Dispose()
 cn.Dispose()
 cn = Nothing
 End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
 <title>隨機讀取Access數據庫記錄</title>
</head>
<body>
 <form id="form1" runat="server">
 <div>
 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
 <asp:HyperLinkField DataNavigateUrlFields="objectGuid" HeaderText="文章" DataTextField="Title"
 DataNavigateUrlFormatString="http://dotnet.aspx.cc/article/{0}/read.aspx" />
</Columns>
 </asp:GridView>
 </div>
 </form>
</body>
</html>

 


Partial Class Default8
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

'查詢記錄的方法 
'定義()
Dim MyConn As Data.SqlClient.SqlConnection
Dim MyComm As Data.SqlClient.SqlCommand

MyConn = New Data.SqlClient.SqlConnection("server=localhost;uid=sa;pwd=;database=cz2008")

Dim sqlstr As String
sqlstr = "Select * from T_bmddm where bmddm like " + "'%" + TextBox1.Text + "%'"
Page.Response.Write(sqlstr)

MyComm = New Data.SqlClient.SqlCommand(sqlstr, MyConn)
MyConn.Open()

If MyConn.State = 1 Then
Label1.Text = "The Connection State is: " & MyConn.State & " - Connection Succeeded"
Else
Label1.Text = "The Connection State is: " & MyConn.State & " - Connection Failed"
End If

Dim reader As Data.SqlClient.SqlDataReader = MyComm.ExecuteReader
'Authors.DataSource = reader


' Page.Response.Write(MyComm.ExecuteReader.Item(0))
Authors.DataSource = MyComm.ExecuteReader
Authors.DataBind()

Page.Response.Write(MyComm.Connection.DataSource)
End Sub

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
'刪除記錄的方法
Dim MyConn As Data.SqlClient.SqlConnection
Dim MyComm As Data.SqlClient.SqlCommand
MyConn = New Data.SqlClient.SqlConnection("server=localhost;uid=sa;pwd=;database=cz2008")
Dim sqlstr As String
sqlstr = "delete from T_bmddmwhere bmddm =" + " '" + TextBox1.Text + "'"
MyComm = New Data.SqlClient.SqlCommand(sqlstr, MyConn)
MyConn.Open()
If MyConn.State = 1 Then
Label1.Text = "The Connection State1 is: " & MyConn.State & " - Connection Succeeded"
Else
Label1.Text = "The Connection State1 is: " & MyConn.State & " - Connection Failed"
End If
MyComm.CommandText = sqlstr
MyComm.ExecuteNonQuery()
MsgBox("信息刪除成功!", 0, "提示")
End Sub

Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
'實用session查詢記錄的方法
'通過Page.Session臨時記錄變量
Dim MyConn As Data.SqlClient.SqlConnection
Dim MyComm As Data.SqlClient.SqlCommand

MyConn = New Data.SqlClient.SqlConnection("server=localhost;uid=sa;pwd=;database=cz2008")

Dim sqlstr As String
Dim aa As String
Page.Session("aa") = TextBox1.Text
Page.Response.Write(Page.Session("aa"))
sqlstr = "Select * from T_bmddm where bmddm like " + "'%" + TextBox1.Text + "%'"
Page.Response.Write(sqlstr)

MyComm = New Data.SqlClient.SqlCommand(sqlstr, MyConn)
MyConn.Open()

If MyConn.State = 1 Then
Label1.Text = "The Connection State is: " & MyConn.State & " - Connection Succeeded"
Else
Label1.Text = "The Connection State is: " & MyConn.State & " - Connection Failed"
End If
Authors.DataSource = MyComm.ExecuteReader
Authors.DataBind()

End Sub
Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click

'插入記錄的方法
Dim sql As String
Dim MyConn As Data.SqlClient.SqlConnection
Dim MyComm As Data.SqlClient.SqlCommand
MyConn = New Data.SqlClient.SqlConnection("server=localhost;uid=sa;pwd=;database=cz2008")
Dim tBmddm, tbmd, txzqhdm, taddr, ttel, tlxr, tbmdcc, tzslbdm, tpassword, tnote, ttag, tbmdkl, tfirst_sn, tlast_sn As String

tBmddm = Bmddmtxt.Text
tbmd = bmdtxt.Text
txzqhdm = xzqhdmtxt.Text
taddr = addrTxt.Text
ttel = telTxt.Text
tlxr = lxrTxt.Text
tbmdcc = bmdccTxt.Text
tzslbdm = zslbdmTxt.Text
tpassword = passwordTxt.Text
tnote = noteTxt.Text
ttag = tagTxt.Text
tbmdkl = bmdklTxt.Text
tfirst_sn = first_snTxt.Text
tlast_sn = last_snTxt.Text

sql = "insert into T_bmddm(Bmddm,bmd,xzqhdm,addr,tel,lxr,bmdcc,zslbdm,password,note,tag,bmdkl,first_sn,last_sn) values (" + tBmddm + "," + tbmd + "," + txzqhdm + "," + taddr + "," + ttel + "," + tlxr + "," + tbmdcc + "," + tzslbdm + "," + tpassword + "," + tnote + "," + ttag + "," + tbmdkl + "," + tfirst_sn + "," + tlast_sn + ")"
MyComm = New Data.SqlClient.SqlCommand(sql, MyConn)
MyConn.Open()
MyComm.ExecuteNonQuery()
MyConn.Close()
MsgBox("信息添加成功!", 0, "提示")

End Sub

Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
'修改記錄的方法


Dim sql As String
Dim tBmddm, tbmd, txzqhdm As String

tBmddm = Bmddmtxt.Text
tbmd = bmdtxt.Text
txzqhdm = xzqhdmtxt.Text
Dim MyConn As Data.SqlClient.SqlConnection
Dim MyComm As Data.SqlClient.SqlCommand
MyConn = New Data.SqlClient.SqlConnection("server=localhost;uid=sa;pwd=;database=cz2008")
sql = "Update T_bmddm Set bmd=" + tbmd + " Where bmddm=" + tBmddm
MyComm = New Data.SqlClient.SqlCommand(sql, MyConn)
MyComm = New Data.SqlClient.SqlCommand(sql, MyConn)
MyConn.Open()
MyComm.ExecuteNonQuery()
MyConn.Close()
MsgBox("信息修改成功!", 0, "提示")
End Sub
End Class

發佈了29 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章