Data transfer using vb.net - database

I am new to vb.net and very confused at this point. I have experience with vba within excel and have taken a basic vb class at my university but I am clue less when it comes to this.
I have multi projects I would like to try, but I am stuck on how to transfer data, text string from one program to the other using a vb.net app!
I believe the process I am looking for is data binding? is that correct?
The 3 processes I am trying to accomplish.
Excel to Excel text or cell transfer/ copy and paste.
I have file A which is an excel file with rows and columns of data in cells. Then I have file B which is a template with graphs and some other formulas. I am trying to use a vb.net app to open file A copy all the data and paste into a sheet in file B. I have figured out how to open the files but as for the data transfer method I have not found anything.
Private Sub btn_Do_Click(sender As Object, e As EventArgs) Handles btn_Do.Click
Dim txtpath As String
Dim csvpath As String = "C:\Temp"
Dim FileTXT As String
Dim folderpath As String
Dim FinalFile As String
folderpath = "C:\Users\aholiday\Desktop\Data Dump"
FileTXT = cbo_FileList.Text
csvpath = "C:\Temp\" & FileTXT & ".csv"
txtpath = folderpath & "\" & FileTXT & ".txt"
FinalFile = "C:\Users\aholiday\Desktop\Book1"
File.Copy(txtpath, csvpath)
Process.Start("EXCEL.EXE", csvpath)
Process.Start("EXCEL.EXE", FinalFile)
File.Delete(csvpath)
End Sub
Access database to a chart in vb.net app.
Next I have an vb.net app that has a chart in it. How would I get data from an excel file into it. I have no code for this because I am not sure what the method I need is. I need this to be "live" meaning if someone changes something in the excel file it will update on the chart in the app. But the the first step is getting the data out of excel and into the chart. This is the only example I could find and its for Microsoft access as the data source. It didn't work.
Imports System.Data.OleDb
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs)Handles Button1.Click
Chart1.Series.Add("Numbers")
Dim Conn As OleDbConnection = New OleDbConnection
Dim Provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
Dim dataFile = "C:\Users\aholiday\Desktop\Database11.accdb"
Conn.ConnectionString = Provider & dataFile
Conn.Open()
'Adds data to chart
Dim cmd As OleDbCommand = New OleDbCommand("Select [Month],[Number] FROM [Table1]", Conn)
Dim dr As OleDbDataReader = cmd.ExecuteReader
While dr.Read
Chart1.Series("Table1").Points.AddXY(dr("Month").ToString, dr("Number").ToString)
End While
dr.Close()
cmd.Dispose()
End Sub
End Class
Excel to vb.net pictures and text string transfer.
And last. I have an vb.net app that have textbox and picture boxes in the design layout. I have an excel file with strings of text and pictures within cells. I would like code to copy the text and pictures and place them in the textbox and Picturebox.
I would like to learn how one would accomplish any of those.Please post any helpful content from sources. Any suggestions and especially examples would be awesome. Please nothing from Microsoft unless it crystal clear. I have spent about a day researching and googled everything I could think of and have found very little. None that work when I try to use it.
Thank you

Related

How do I get the selected option from a combobox to display the information from that option in the next page in text boxes?

Sorry, quite difficult to word.
I'm coding a 'surgery database' for a school project and have got so far as to program the login page, which works successfully from the database, and I have coded the directory. The directory combobox displays patients from the database and this functions correctly, but I do not know how to get it so that when you press search, it opens up my main.vb page and fills the textboxes with the correct data from the access database, based upon which patient was selected.
Massive thanks to anyone who can help.
I'm on VB using microsoft access which I haven't really used before. I've tried following tutorials but everything seems slightly different and doesn't get the desired results.
Private Sub BtnPatient_Click(sender As Object, e As EventArgs) Handles BtnPatient.Click
Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM PatientDB WHERE [Name] = " & TxtPatient.Text & "'", myConnection)
Dim dr As OleDbDataReader = cmd.ExecuteReader
Me.Visible = False
Me.Hide()
Main.ShowDialog()
myConnection.Close()
End Sub
The output should be the patients details from the access database.

DELETE VALIDATION for DataGridView

I wan't some help about my DELETE button.
At first my the code was a success. It can delete both the data's from the vb program as well as the data of the database which is located at MS Access.
But, when I added some validations to my DELETE button, adding it some MessageBoxstyle and MessageBoxButton it just won't work. It only deletes the entry of the textboxes not the data itself.
My Question Would be...
I wan't my program to not only DELETE the data on the textboxes but also the data that corresponds on the DatagridView when I press "YES" on the confirmation message. And when I click on the NO button it'll only just remain as it is. HOW do you do this???
Please someone help me. I'm new to this and still learning. I'm still a student and I really need this for my System... thank you!
Here is my code!
Imports System.Data.OleDb
Imports System.Text.RegularExpressions
Public Class Monitoring_Form
Dim connect As OleDbConnection
Dim adapter As OleDbDataAdapter
Dim commnd As OleDbCommand
Dim dataset As DataSet
Dim datatable As DataTable
Dim table As DataTableCollection
Dim binding As New BindingSource
Dim id As Integer
Dim Email As Boolean
Private Sub btn_cdelete_Click(sender As System.Object, e As System.EventArgs) Handles btn_cdelete.Click
txt_customerID.Text = id
If MessageBox.Show("Are you sure you wan't to DELETE this record?", "Delete Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
commnd = New OleDbCommand("delete FROM CustomersInfo WHERE FirstName = '" + txt_firstname.Text + "'", connect)
commnd.ExecuteNonQuery()
MsgBox("ENTRY SUCCESSFULLY DELETED!")
txt_customerID.Text = ""
txt_firstname.Text = ""
txt_lastname.Text = ""
txt_add.Text = ""
txt_cnumber.Text = ""
txt_email.Text = ""
'' Me.dgv_1.Rows.RemoveAt(Me.dgv_1.CurrentRow.ToString())
Else
End If
End Sub
I've just edited my Question to make it clear for you guys. Please help and sorry for the mistake.
This is the revision of my code

VB.NET - .accdb database not saving changes

I can't figure out why my code won't save to my .accdb database.
I am fetching data from a .accdb database file and displaying it in a DataGridView, and then allowing changes to be made to it there. (This is a stock control system.) After making changes, the user is meant to be able to send the data back so it is saved in the .accdb file.
I have looked online everywhere and tried multiple different ways of doing this. This is the way I am currently using to solve the problem, but when running the code it does not save to the .accdb file. (However, it throws up no errors.)
Public Class Database
Dim datatable As DataTable
Dim adapter As OleDb.OleDbDataAdapter
Dim dbCon As New OleDb.OleDbConnection
Dim dbProvider As String = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"
Dim dbRsrc As String = "Data Source =" & System.IO.Directory.GetCurrentDirectory & "/Resources/List.accdb"
Dim binding As BindingSource
Dim cmdBuilder As OleDb.OleDbCommandBuilder
Private Sub Database_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dbCon.ConnectionString = dbProvider & dbRsrc
dbCon.Open()
adapter = New OleDb.OleDbDataAdapter("Select * FROM List", dbCon)
datatable = New DataTable
adapter.FillSchema(datatable, SchemaType.Source)
adapter.Fill(datatable)
binding = New BindingSource
binding.DataSource = datatable
dbCon.Close()
StockTable.DataSource = binding
End Sub
Private Sub SaveBtn_Click(sender As Object, e As EventArgs) Handles SaveBtn.Click
'insert validation here
Try
dbCon.ConnectionString = dbProvider & dbRsrc
dbCon.Open()
cmdBuilder = New OleDb.OleDbCommandBuilder(adapter)
adapter.AcceptChangesDuringUpdate = True
adapter.Update(datatable)
dbCon.Close()
Catch ex As Exception
MsgBox(ex.Message.ToString() & " Save Unsuccessful.")
End Try
End Sub
End Class
Not sure where I'm going wrong - when I hit the 'save' button, it should connect to the database, build a SQL query to update it and then update my datatable + .accdb database, right?
To test it, I've tried editing multiple columns and saving it, but when opening the file it still says the same values as it had before.
Any suggestions/pointers? I'm pretty newbie to VB.NET, learnt it about 3 months ago and only just starting to get fully into it.
Many thanks to the user "jmcilhinney" who helped me to reach this answer. I feel highly stupid at not realising that my code was working.
I used
Debug.WriteLine("Update value: " & adapter.Update(datatable))
Debug.WriteLine("Connection str: " & dbProvider & dbRsrc)
to find that my update command worked, and that in fact the output of my database file was in the /bin/ folder. I didn't realise that it used the /bin/ folder, and was looking in the root folder with the .VB files, etc.

VB.NET issue loading textboxes with data from SQL Server

I have some textboxes (using VS2010) I'm trying to populate with values from columns in a SQL Server database based on what item someone selects from a combobox. At first I was able to display the values for the first item in the combobox, but now nothing at all displays when I debug. Code:
Private Sub loadfields(sender As System.Object, e As System.EventArgs) Handles client_selection_combobox.SelectedIndexChanged
Using myconnection As New SqlConnection("connection string")
Dim loadfields As String = "SELECT company FROM ClientFileDatabase WHERE ClientFileDatabase.File_Name=#company;"
Dim loadfields_sqlcommand As New SqlCommand(loadfields, myconnection)
loadfields_sqlcommand.Parameters.Add("#company", SqlDbType.NVarChar)
loadfields_sqlcommand.Parameters("#company").Value = client_selection_combobox.SelectedIndex.ToString
Dim loadfields_dataadapter As New SqlDataAdapter
loadfields_dataadapter.SelectCommand = loadfields_sqlcommand
Dim loadfields_dataset As DataSet = New DataSet()
loadfields_dataadapter.Fill(loadfields_dataset, "ClientFileDatabase")
Dim loadfields_dataview = New DataView(loadfields_dataset.Tables("ClientFileDatabase"))
companyname_textbox.DataBindings.Clear()
companyname_textbox.DataBindings.Add("Text", loadfields_dataview, "Company")
taxid_textbox.DataBindings.Clear()
taxid_textbox.DataBindings.Add("Text", loadfields_dataview, "TaxIDNumber")
accountmanager_textbox.DataBindings.Clear()
accountmanager_textbox.DataBindings.Add("Text", loadfields_dataview, "AccountManager")
etc...
End Using
End Sub
I've also tried using the SelectedValueChanged and SelectionChangeCommitted event handlers to no avail. Also tried using a refresh after setting the databindings, didn't help. Any advice welcome, thanks!
I personally like to use datatables, I find them easier to work with. I'm sure you will have more code to check to make sure dt.rows.count > 0 before actually attempting to work with the data, but here is how I would do it.
Dim loadfields_dataadapter As New SqlDataAdapter
Dim dt As New DataTable
loadfields_dataadapter.Fill(dt)
companyname_textbox.text = dt.Rows(0).Item("Company")
taxid_textbox.text = dt.Rows(0).Item("TaxIDNumber")
accountmanager_textbox.text = dt.Rows(0).Item("AccountManager")
Also, keep in mind that NULL fields in the database can cause runtime errors, so you may have to check for those as well.

Winforms DataTable Convert to Excel

In asp.net, it is quite easy to convert a datatable to an excel file. How do I do the same for datatables in winforms?
For Example: in my asp.net code, here is my function to convert the datatable to excel:
Public Shared Sub DataTableToExcel(ByVal dt As DataTable, ByVal FileName As String
HttpContext.Current.Response.Clear()
HttpContext.Current.Response.Write(Environment.NewLine)
For Each row As DataRow In dt.Rows
For i As Integer = 0 To dt.Columns.Count - 1
HttpContext.Current.Response.Write(row(i).ToString().Replace(";", String.Empty) + ";")
Next
HttpContext.Current.Response.Write(Environment.NewLine)
Next
HttpContext.Current.Response.ContentType = "application/ms-excel"
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName + ".xls")
HttpContext.Current.Response.[End]()
End Sub
But in winforms, you cannot use the same as it is. You need to read out the datatable and create/open the excel workbook.
I wish there is a way to directly convert datatable used in winforms to excel fast.
Thanks.
All this code is really doing is creating a CSV file (with semicolons instead of commas) and telling Excel to open it. You could do something similar in C# with the following code. Note that 'FileName' must include an extension that Excel is associated with.
Public Shared Sub DataTableToExcel(ByVal dt As DataTable, ByVal FileName As String)
StreamWriter writer = new StreamWriter(FileName)
For Each row As DataRow In dt.Rows
For i As Integer = 0 To dt.Columns.Count - 1
writer.Write(row(i).ToString().Replace(";", String.Empty) + ";")
Next
writer.WriteLine()
Next
writer.Close()
System.Diagnostics.Process.Start(FileName)
End Sub

Resources