I want to import Excel chart into my SQL Server database by select it by dialog box and automatically save it to the SQL Server table + I want to generate the record ID by the sub that I made.
The sub that generates the MembersID
is:
Public MyNewMembersID As Integer
Public Sub Code_Members()
Dim dt As New DataTable
Dim da As New SqlDataAdapter("select max(MembersID) from Members", Con)
da.Fill(dt)
If IsDBNull(dt(0)(0)) = True Then
MyNewMembersID = 1
Else
MyNewMembersID = dt(0)(0) + 1
End If
This is my code that errors with a message that MembersID
must not be NULL:
Imports System.IO
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.Configuration
Public Class MembersImport
Private Sub MembersImport_FilePath_Button_Click(sender As Object, e As EventArgs) Handles MembersImport_FilePath_Button.Click
MembersImport_OpenFileDialog.ShowDialog()
End Sub
Private Sub MembersImport_ImportFile_Button_Click(sender As Object, e As EventArgs) Handles MembersImport_ImportFile_Button.Click
If MembersImport_FilePath_TextBox.Text = "" Then
MsgBox("Please Select File Excel", MsgBoxStyle.RetryCancel, "File Not Found")
MembersImport_FilePath_Button.PerformClick()
Else
Dim con_excel As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & MembersImport_FilePath_TextBox.Text & "';Extended Properties=""Excel 12.0 Xml;HDR=Yes""")
con_excel.Open()
Dim query_excel As String = "Select * from [Sheet1$]"
Dim cmd As OleDbCommand = New OleDbCommand(query_excel, con_excel)
Dim rd As OleDbDataReader
Dim con_sql As New SqlConnection()
Dim con_sqlDB As String = "Data Source=(localdb)\ProjectsV13;Initial Catalog=Euro_SQL_Server;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
con_sql.ConnectionString = con_sqlDB
con_sql.Open()
Using BulkCopy As SqlBulkCopy = New SqlBulkCopy(con_sql)
BulkCopy.DestinationTableName = "dbo.Members"
Try
rd = cmd.ExecuteReader
BulkCopy.WriteToServer(rd)
rd.Close()
con_sql.Close()
MsgBox("تم الاسترداد بنجاح")
MembersImport_FilePath_TextBox.Text = ""
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Using
Load_Members()
Me.Close()
End If
End Sub
Private Sub MembersImport_OpenFileDialog_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MembersImport_OpenFileDialog.FileOk
MembersImport_FilePath_TextBox.Text = MembersImport_OpenFileDialog.FileName
End Sub
End Class
And this is my table structure:
CREATE TABLE [dbo].[Members]
(
[MembersID] INT NOT NULL,
[MembersName] NVARCHAR(MAX) NULL,
[MembersGender] NVARCHAR(MAX) NULL,
[MembersPhone] NVARCHAR(MAX) NULL,
[MembersAddress] NVARCHAR(MAX) NULL,
[MembersMembershiping] BIT NULL,
[MembersMembershipNum] NVARCHAR (MAX) NULL,
[MembersMembershipValidityFrom] DATE NULL,
[MembersMembershipValidityTo] DATE NULL,
[MembersSubscriberSystem] NVARCHAR(MAX) NULL,
[MembersCarBrand] NVARCHAR(MAX) NULL,
[MembersCarModel] NVARCHAR(MAX) NULL,
[MembersCarManufacturingYear] NVARCHAR(MAX) NULL,
[MembersCarNum] NVARCHAR(MAX) NULL,
[MembersChassisNum] NVARCHAR(MAX) NULL,
[MembersCarColor] NVARCHAR(MAX) NULL,
[MembersNotes] NVARCHAR(MAX) NULL,
[ActionBy] NVARCHAR(MAX) NULL,
PRIMARY KEY CLUSTERED ([MembersID] ASC)
);
So all I need is to import the data that is in the Excel with generated MembersID
into the SQL Server database
NVARCHAR(MAX)
because you're too lazy to think about what proper length the strings should be. TheMAX
types are great - IF you really need up to 2 billion characters - but a phone number?!?!?!? Really !?!?!??!? Or gender?? C'mon - you can do better than this!