* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download sqlServer2
Entity–attribute–value model wikipedia , lookup
Extensible Storage Engine wikipedia , lookup
Microsoft Access wikipedia , lookup
Microsoft Jet Database Engine wikipedia , lookup
Relational model wikipedia , lookup
Clusterpoint wikipedia , lookup
Database model wikipedia , lookup
Using SQL Server Express
with Visual Basic.NET
Professor Ralph Westfall
April 2011
Sample Code
Create Visual Basic.NET Project
Start>All Programs>Microsoft Visual Studio
2008
Click Project link after Create: on left side
Expand Visual Basic>click Windows>Windows
Forms Application>rename as Olympics-SQL>
OK
File>Save All>[check Create Directory for
solution if available>]browse to the
Desktop>Save
File>Exit
SQL Server Express Versions
You may get SQL Server Express 2005
when you install Visual Studio Professional
2008
If so, you should also install SQL Server Express
2008 to go with it (download the x64 version for
Vista, or the x86 one for other Windows
versions)
If you can avoid installing SQL Server Express
2005 when installing Visual Basic, it will make it
easier to install SQL Server Express 2008
Set Up SQL Server Express
I was having trouble connecting with SQL
Server 2008 until I did the following
See the following slide if these menu choices
aren’t available
Start>All Programs>Microsoft SQL Server
2008>Configuration Tools>SQL Server
[Surface Area] Configuration Manager
click lower link that says Surface Area
Configuration for Services and Connections
Click Remote Connections>Local and remote
connections>Using TCP/IP only>OK
Set Up SQL Server Express
I installed a later version and it was like this:
Start>All Programs>Microsoft SQL Server
2008>Configuration Tools>SQL Server
Configuration Manager
Click SQL Server Services>if Log On As is not
LocalSystem, right-click SQL Server
(SQLEXPRESS)>Properties>Built-in
account:>select LocalSystem>OK>Yes
Then close Tools>SQL Server Configuration
Manager
Create a SQL Server Database
Start>All Programs>Microsoft SQL Server
2008>SQL Server Management Studio>OK
Be sure Windows Authentication is being used,
write down the Server name:>click Connect
Expand server name and then Databases in
Object Explorer window on lower left
if get error message, minimize, click refresh
button at top of Object Explorer and try again
problem may be a database that wasn't detached
before deletion
right-click Databases>New Database>type
Olympics as Database name:>OK
Import Data
File for following instructions: olympics.csv
Opens in Excel, save from there>Yes (to keep
CSV format, then No on save changes)
Right-click Olympics (database name)>
Tasks>Import Data>Next>
select Flat File Source>Browse and select Files
of type: CSV files (*.csv) to get
olympics.csv>select Format: Delimited>Next>
(use Format: Ragged right for *.txt files)
Next >Next (Use Windows authentication)>
Next> click Edit Mappings button
Modify Fields, View Data
Change field names and properties in
Destination column:
1st column = Country, Data Type = nchar(20)
Next three rows should be Gold, Silver, Bronze,
each with Data Type of int
Last row should be Pop, with Data Type of
decimal with Precision = 7, Scale = 2>OK
Create destination table should be checked
Next>Next>Next>Finish> Close
Modify Database Structure
Expand database name in Object Explorer
Right-click Olympics>Refresh
Expand Tables>right-click dbo.olympics>Design
Set up key field
Right-click first row>Insert Column>make name be
ID>change Data Type to int>unclick Allow nulls (but
leave checked for other fields)
Right-click ID>Set Primary Key
In Column properties below, expand Identity
Specification, set (IsIdentity) as Yes, set Identity
Seed as 100 or 101 (makes all keys same length)
Saving New Database Table
File>Save Olympics>Yes (ignore warnings)
If still can’t save: Tools>Options>Designers>
uncheck Prevent saving changes … >OK and
then try to save again
Right-click table name>Edit Top 200 Rows
Verify that proper data is in right-most fields
(integers in Bronze, decimals in Pop
Edit data if necessary to fix problems
Field Length Data Types
int 4 bytes, values range from ±2 billion
char is number of bytes in parentheses
varchar is for variable length text fields
Reserves that much space for fields
nchar is for international (Unicode) applications
Only uses as much space as is needed for each
field (saves space in database)
Use nvarchar for international applications
decimal (x, y) is more accurate than float for
decimal values (x=total digits, y=decimals)
Can have missing values with Allow Nulls
Never allow ID field value to be missing!
Detach Database
Right-click Olympics (database name) in
Object Explorer>Facets>select and copy
PrimaryFilePath>OK
Open File Explorer and paste that path into
address box
Close the Design and/or Edit windows on the
right of Management studio>right-click
Olympics>Tasks>Detach>check Drop>OK
Close Management Studio
Move SQL Server Database
Select and Cut Olympics.mdf and
Olympics_log.ldf files in Windows Explorer
Create a new folder named cis338 on the C:\
drive
Then paste the two files into that directory
Microsoft Access 2007
File for following instructions: olympics.csv
Start>All Programs>Microsoft Office>
Microsoft Office Access 2007
Click Blank database>name it
olympics.accdb>browse to C:\cis338 [thanks
to Rafael Robles] folder and Save the file in
that directory>Click Create
Microsoft Access Data Fields
Click External Data tab>click Import text file
icon>Import the source data into a new
table>browse to olympics.csv file>OK>
Delimited>Next>Comma>Next>
Change Field Names to Country, Gold, Silver,
Bronze, Pop
Make Country be Text, the medals be Integer, and
Pop be Double>Next
Let Access add primary key>Next
Leave Table name as Olympics>Finish>Close
Close Table1>Exit Access
Restart Visual Basic Project
Double click the Olympics-SQL.sln file in
Olympics-SQL folder on the Desktop to
restart Visual Studio 2008
Click Form1 in Solution Explorer and then the
icon to view it in the designer window
Right-click Form1 in designer window>
Properties
Change (Name) to frmUI
Change Text to Olympics Data
Click and drag right side of Form to make it
wider
Add Controls
Go to Form Designer window and drag the
following onto the following locations on Form:
Upper left: Label, set Text as Country
Under Label: ComboBox, (Name) cboCountries,
change DropDownStyle to Simple, Sorted to True,
Font to Courier New
To right of 1st Label: Label, set Text as # of Golds
Under 2nd Label: ListBox, (Name) lstGolds
Click Items (Collection) in lstGolds and type 1
through 10 on separate rows>OK
More Controls
Add a CheckBox to right of 2nd Label with
(Name) = chkPop, Text = Populous?
Put * separate Buttons below each control
Name them btnCountry, btnGolds, btnPop and set
the Text for each as Select
Add two more Buttons: btnClear and btnExit, with
Text of Clear and Exit
* grammar error (superfluous ‘a’) spotted by Cameron
Berlino
Output ListBox
Add another ListBox stretching across the
bottom of the Form, (Name) lstOutputs
Add label over it: Text=Countries
G S B Pop
Set ListBox Font to Courier New so that outputs
will line up in columns
Align controls and Labels to look professional
Add a Module: Data Tier
Project>Add Module>Name: DataSS.vb>OK
Type: Imports System.Data.SqlClient above the
Module statement
Imports System.Data.OleDb 'Use for MS Access
Below the Module statement, type:
Private pads() As Integer = {19, 3, 3, 3, 7}
Public Function AcquireData(ByVal queryStr As
String, ByVal startSize As Integer) As ArrayList
Then hit Enter to generate End Function
Add Variable Declarations
Type the following in the new Function
Dim alsData As ArrayList
Dim da As SqlDataAdapter
Dim ds As DataSet
Dim con As SqlConnection
Dim dr As DataRow
Dim dc As DataColumn
Dim rowData As String
'*
'**
'* OleDbDataAdapter for Access
'** OleDbConnection for Access
Add Code for Database
Below the declarations, type following lines:
ds = New DataSet
con = New SqlConnection
'OleDbConnection
con.ConnectionString = "server=(local)\SQLEXPRESS;
AttachDbFilename=" & "C:\cis338\Olympics.mdf;" &
"Integrated Security=True;"
'or Olympics.dbo if that's the file type
'or con.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
"C:\cis338\Olympics.accdb;" [thanks to Karla Lopez]
More Code for Database
con.Open()
da = New SqlDataAdapter(queryStr, con)
'OleDbDataAdapter
da.Fill(ds) 'da.Fill(ds, "Olympics")
Add Code to Load ArrayList
Next, type:
alsData = New ArrayList(startSize)
Dim i as Integer 'move up into other declations
For Each dr In ds.Tables(0).Rows
rowData = ""
For Each dc In ds.Tables(0).Columns
rowData += Trim(dr(dc).ToString()).PadRight(pads(i)) '*
i += 1
Next
i=0
alsData.Add(rowData)
Next
* will need to use PadLeft for left padding numbers
Finish Function and Module
Type:
con.Close()
da = Nothing
ds = Nothing
Return alsData
Code the Form
Double-click the Form in the designer
Add the following declaration above the
frmUI_Load Sub:
Private alsData As ArrayList
Add the following code to the frmUI_Load
Sub
alsData = DataSS.AcquireData("select Country
from Olympics order by Country", 80)
For Each item In alsData
cboCountries.Items.Add(Trim(item.ToString))
Next
Test the Data Tier and Form
Double click the Exit button on the Form and
then put the word End in the generated Sub
Now run the code and make corrections if
necessary
might be easier to just copy code from this
PowerPoint over again where problems are
found
and/or look at code/copy from Sample Code zip
Add a Module: Business Tier
Project>Add Module>name BizTier.vb>OK
Type code below the Module statement:
Private Const COUNTRY_FIELD As String = "
Country "
Private Const ALL_FIELDS As String = " * "
Private Const COUNTRY_COUNT As Integer = 80
'default ArrayList size
Private Const SIZE_FACTOR As Integer = 3
'for reducing ArrayList size for selections
Code a Function
Type the following below the declarations
shown on previous slide:
Public Function GetData(ByVal whatData As
String, Optional ByVal whatCriteria As String =
"", Optional ByVal whatCompare As String = "=")
As ArrayList
With cursor at end of above line, hit Enter to
generate End Function
Declare and Initialize
Type the following code within the Function:
Dim selectors As String
Dim fromArg As String
Dim orderArg As String
Dim dataSize As Integer
Dim dataSizeSmaller As Integer
Dim sqlStr As String = ""
selectors = " select Country "
fromArg = " from Olympics "
orderArg = " order by Country; "
Add Selection Code
Type:
dataSizeSmaller = CInt(COUNTRY_COUNT /
SIZE_FACTOR) 'reduces default size
If whatData = "formLoad" Then
sqlStr = selectors & fromArg & orderArg
dataSize = COUNTRY_COUNT
Else
selectors += ", Gold, Silver, Bronze, Pop"
dataSize = dataSizeSmaller
More Selection Code
Type:
If whatData = "country" Then
sqlStr = selectors & fromArg & " where
Country " & whatCompare & "'" & whatCriteria &
"'" & orderArg
dataSize = dataSizeSmaller
ElseIf whatData = "population" Then
sqlStr = selectors & fromArg & " where
Pop " & whatCompare & whatCriteria & orderArg
Finish Coding BizTier Module
Type:
ElseIf whatData = "golds" Then
sqlStr = selectors & fromArg & " where Gold "
& whatCompare & whatCriteria & orderArg
End If
End If
Type the following just above End Function:
Console.WriteLine(sqlStr) 'for debugging
Return DataSS.AcquireData(sqlStr, dataSize)
Run the code and fix any compilation errors
Note: you won't get any output yet
Add Code for Form Selections
In the frmUI.vb file, add the following lines
just below the Class statement at top of file:
Private selector As String
Private comparer As String
Replace the line for loading the ArrayList
from the DataSQL Module in the frmUI_Load
Sub (starts with alsData =) with :
alsData = BizTier.GetData("formLoad")
In the design window, double-click all of the
buttons to generate Subs for their code
Add Code to Clear Selections
Add a Sub to clear selections:
Private Sub ClearSelections()
lstOutputs.SelectedItem = Nothing
lstGolds.SelectedItem = Nothing
cboCountries.SelectedItem = Nothing
chkPop.Checked = False
End Sub
Put following into Sub for btnClear:
ClearSelections()
lstOutputs.DataSource = Nothing 'clears outputs
Add Country Selection Code
Put following into Sub to select countries:
If cboCountries.SelectedIndex = -1 Then
MessageBox.Show("Please select a country”)
Else
selector =
cboCountries.SelectedItem.ToString.Replace("'", "''")
'single quote in 1st string, 2 single quotes in 2nd
lstOutputs.DataSource =
BizTier.GetData("country", selector, "=")
lstOutputs.DataSource =
BizTier.GetData("country", selector, "=")
cboCountries.SelectedItem = selector 'restore this
End If
Add Gold Medal Selections
Add the following code for btnGolds:
If lstGolds.SelectedIndex = -1 Then
MessageBox.Show("Please select number of
gold medals")
Else
selector = lstGolds.SelectedItem.ToString
comparer = "="
lstOutputs.DataSource =
BizTier.GetData("golds", selector, comparer)
ClearSelections()
lstGolds.SelectedItem = selector
End If
Add Large Population Selection
Add the following code for btnPop:
Dim bigPop As Boolean
comparer = ""
bigPop = chkPop.Checked
If bigPop Then
comparer = ">="
Else
comparer = "<"
End If
lstOutputs.DataSource =
BizTier.GetData("population", "100", comparer)
ClearSelections()
chkPop.Checked = bigPop
Test and Fine Tune
Run the code and test all the buttons and
selection possibilities
Be sure to verify that current selections stay
visible but all others are cleared on each click
Verify that the outputs data is correct for each
selection
Be sure that every Button gets clicked several
times before you click the Exit button
Fine tune form appearance and usability
Appearance should be pleasing and professional
Form should be easy and “natural” to use
Form should be as compact as possible for user