Рейтинг:
20
RDBurmon
Вот вам и ответ :
Imports System.Data.OleDb
Public Class Form1
Private Sub btnsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.Click
Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=PatientLabInvestigations.accdb;")
Dim cmd As New OledbCommand
Dim var1 As String
con.Open()
cmd.Connection = con
For l_index As Integer = 0 To lstlabinvestigations.Items.Count - 1
var1 = String.Concat("'", txtpatientname.Text.ToString(), "','", txtpatintage.Text.ToString(), "','", txtpatientticketno.Text.ToString(), "','", CStr(lstlabinvestigations.Items(l_index)).ToString(), "'")
cmd.CommandText = "INSERT INTO tblLabInvestigations(PatientName,Age,TicketNo,LabInvestigation) VALUES(" + var1 + ")"
cmd.ExecuteNonQuery()
Next
MessageBox.Show("Record saved successfully")
End Sub
End Class
Надеюсь, это поможет. Попробуйте и если это сработает то примите и проголосуйте за этот ответ
Mike Meinz
Пожалуйста, используйте объекты OLEDBParameter для передачи значений в инструкцию SQL. Использование конкатенированной строки, как показано в решении 1, позволит атаковать SQL-инъекцию. Кроме того, если имя пациента содержит Апостроф (например, Джеймс О'Тул), ваш пример кода не будет выполнен. Использование объектов OLEDBParameter предотвратит эту проблему.
sarfarazbhat
Да, если я попытаюсь вставить имя как Бхат, это даст мне ошибку.Отсутствует оператор в запросе.
sarfarazbhat
Спасибо за вашу любезную помощь.
RDBurmon
Я не думаю, что мы можем использовать SQLParamer с базой данных Access. А мы можем?
sarfarazbhat
Да, если я попытаюсь вставить имя как Бхат, это даст мне ошибку.Отсутствует оператор в запросе:::
Mike Meinz
Спасибо за ваш ответ. Я упустил из виду тот факт, что это была база данных MS Access. При использовании MS Access параметры передаются с помощью У oledbparameter объект.
sarfarazbhat
Я вычислил ответ на выбор скорости отдельных расследований и сохранение скорости для соответствующего расследования. Вот мой код
Con.Open()
For l_index = 0 To ListBox2.Items.Count - 1
query = ("select Investigation.rate " & _
"from Investigation WHERE (((Investigation.Investigation) = '" & ListBox2.Items(l_index) & "'));")
Dim cmd2 As New OleDbCommand(query, Con)
'Con.Open()
Dim reader As OleDbDataReader = cmd2.ExecuteReader
reader.Read()
'Console.WriteLine(reader(0))
txtrate.Text = reader.GetString(0)
reader.Close()
'Con.Close()
' Con.Close()
'End If
Dim SqlString As String = "Insert Into patients (Receipt_No, OPD_MRD,Patientname,Investigation,Receipt_date,Receipt_time,rate) Values (?,?,?,?,?,?,?)"
Dim cmd As OleDbCommand = New OleDbCommand(SqlString, Con)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("Receipt_No", txtreceiptno.Text.Trim())
cmd.Parameters.AddWithValue("OPD_MRD", txtopd.Text.Trim())
cmd.Parameters.AddWithValue("Patientname", txtname.Text.Trim())
cmd.Parameters.AddWithValue("Investigation", CStr(ListBox2.Items(l_index)).ToString())
cmd.Parameters.AddWithValue("Receipt_date", lbldate.Text)
cmd.Parameters.AddWithValue("Receipt_time", lbltime.Text)
cmd.Parameters.AddWithValue("rate", txtrate.Text.Trim())
'Con.Open()
cmd.ExecuteNonQuery()
Next
Con.Close()
Но выполнение этой задачи занимает очень много времени, и моя система работает в напряженном режиме почти 10 секунд. Есть ли что-то неправильное в этом коде, пожалуйста, посмотрите
Спасибо
Mike Meinz
Убедитесь, что в этом столбце есть индекс: Investigation.Investigation
sarfarazbhat
Пожалуйста, объясните мне, как выбрать скорость отдельных расследований и сохранить скорость для соответствующего расследования.
Мой код выглядит так
For l_index As Integer = 0 To ListBox2.Items.Count - 1
query = "select Investigation.rate " & _
"from Investigation WHERE (((Investigation.Investigation) = '" & ListBox2.Items(i) & "'));"
cmd = New OleDbCommand(query, Con)
cmd.CommandType = CommandType.Text
/here is the problem i do not know how to get the rate
пожалуйста помочь
Спасибо
sarfarazbhat
Что такое VB.Чистый эквивалент кода VB6 следующего содержания:
For i = 0 To List2.ListCount - 1
sql = "patients"
query = "select Investigation.rate " & _
"from Investigation WHERE (((Investigation.Investigation) = '" & List2.List(i) & "'));"
rs2.Open query, Con, adOpenDynamic
If Not rs2.EOF Then
'Text2.Text = rs!Investigation
Text5.Text = rs2!Rate
End If
'rs2.Close
Set rs = New ADODB.Recordset
rs.Open sql, Con, adOpenDynamic, adLockOptimistic
' Dim X As Long
'For X = 0 To List2.ListCount - 1
With rs
.AddNew
!Receipt_No = Trim(text1.Text)
!OPD_MRD = Trim(text2.Text)
!Patientname = Trim(Text3.Text)
!Investigation = List2.List(i)
!Receipt_date = Label6.Caption
!Receipt_time = Label7.Caption
!Rate = Trim(Text5.Text)
.Update
End With
rs2.Close
rs.Close
Next
На самом деле мне нужно сохранить скорость всех элементов списка. Я могу сделать это в vb6, как показано выше, но не в VB.net
Пожалуйста, направьте меня в этом
Спасибо
Рейтинг:
1
sarfarazbhat
Я попробовал следующий код, и он работал правильно
<br />
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click<br />
Dim Str As String<br />
Try<br />
Dim i As Integer<br />
con.Open()<br />
For i = 0 To ListBox2.Items.Count - 1<br />
Str = "insert into login values('" + ListBox2.Items.Item(i) + "')"<br />
<br />
<br />
<br />
<br />
Dim cmd As OleDbCommand = New OleDbCommand(Str, con)<br />
cmd.ExecuteNonQuery()<br />
' Dim Dst As DataSet<br />
<br />
Dim dad As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM login ORDER BY username", con)<br />
' Dad.Fill(Dst, "login")<br />
Next<br />
MsgBox("Record inserted successfully...")<br />
'; con.Close()<br />
Catch ex As Exception<br />
MessageBox.Show("Could Not Insert Record!!!")<br />
MsgBox(ex.Message & " - " & ex.Source)<br />
<br />
con.Close()<br />
End Try<br />
<br />
<br />
<br />
Con.Close()<br />
<br />
End Sub<br />
RDBurmon
Итак, это решило ваш вопрос? У вас есть еще какие-нибудь вопросы?
Я хотел бы вам помочь.
sarfarazbhat
Спасибо<br><br><br> & lt;br>
Я больше запрашиваю, я пытаюсь сохранить записи в базу данных, которая работает просто отлично, но в то же время мне нужно распечатать эту запись (на самом деле квитанцию) Я пишу детали в текстовом файле, но:<br> & lt;br> & lt;br> & lt;br>
Я не могу написать текст в нужных местах в этом текстовом файле, так как в результате печать не выровнена должным образом на бумаге:<br><br><br>;
Я использую код как:<br><br><br> & lt;br>
<br><br><br><br>
Dim file As System.IO.StreamWriter<br><br><br><br>
file = My.Computer.FileSystem.OpenTextFileWriter("text.txt", False)<br><br><br><br>
file.Write(lbldate.Text & vbTab & vbTab & vbTab)<br><br><br><br>
file.Write(lbltime.Text)<br><br><br><br>
file.WriteLine()<br><br><br><br>
file.Write(txtreceiptno.Text & vbTab & vbTab & vbTab)<br><br><br><br>
file.Write(txtopd.Text)<br><br><br><br>
file.WriteLine()<br><br><br><br>
file.Write(txtname.Text & vbTab & vbTab & vbTab)<br><br><br><br>
file.WriteLine()<br><br><br><br>
file.Write("______________________________________")<br><br>
file.WriteLine()<br><br>
file.Close()<br><br>
Dim p As New Process<br>
Dim info As New ProcessStartInfo<br>
info.FileName = "text.txt"<br>
info.Verb = "print"<br>
p.StartInfo = info<br>
p.Start()<br>
<br><br><br> & lt;br>
Кроме того, когда я печатаю квитанцию, также печатается имя текстового файла. Я не знаю почему.
Спасибо