【发布时间】:2018-04-17 14:34:59
【问题描述】:
我想通过对话框选择将Excel图表导入我的SQL Server数据库并自动将其保存到SQL Server表中+我想通过我制作的子生成记录ID。
生成MembersID的子是:
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
这是我的代码,错误提示 MembersID 不能为 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
这是我的表结构:
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)
);
所以我只需要将生成的MembersID 中的 Excel 中的数据导入 SQL Server 数据库
【问题讨论】:
-
在英语中你会不将每个单词都大写 ....
-
另外:您应该使用适当的字符串长度 - 不要只制作
NVARCHAR(MAX)的所有内容,因为您懒得考虑字符串的适当长度。MAX类型很棒 - IF 你真的需要多达 20 亿个字符 - 但是电话号码?!?!?!?真的 !?!?!??!?还是性别??来吧 - 你可以做得比这更好! -
@marc_s loool 你是对的人,我直到现在才被你重新定义它,我在这里仍然是菜鸟:D 所以请原谅我的低知识:V
标签: sql sql-server excel vb.net visual-studio