2014-09-29 2 views
1

У меня есть следующая проблема: я разрабатываю приложение для клиники с помощью vb.net, у врача есть возможность добавлять медицинскую информацию с помощью флажков checkbox2.text = "Allergy" textbox15. текст - это примечания для аллергии, я хочу вставить запись, если файл FileNo (Textbox2.text) пациента не существует, если он обновляет только заметки, до сих пор я мог обновить его после 3-х нажатий кнопки, которые я делаю Не знаю, почему ????если запись существует обновление еще вставить sql vb.net

любая помощь приветствуется :) заранее спасибо

Dim connection3 As New SqlClient.SqlConnection 
    Dim command3 As New SqlClient.SqlCommand 
    Dim adaptor3 As New SqlClient.SqlDataAdapter 
    Dim dataset3 As New DataSet 
    connection3.ConnectionString = ("Data Source=(LocalDB)\v11.0;AttachDbFilename=" + My.Settings.strTextbox + ";Integrated Security=True;Connect Timeout=30") 
    command3.CommandText = "SELECT ID,Type FROM Medical WHERE FileNo='" & TextBox2.Text & "';" 
    connection3.Open() 
    command3.Connection = connection3 
    adaptor3.SelectCommand = command3 
    adaptor3.Fill(dataset3, "0") 
    Dim count9 As Integer = dataset3.Tables(0).Rows.Count - 1 
    If count9 > 0 Then 
     For countz = 0 To count9 
      Dim A2 As String = dataset3.Tables("0").Rows(countz).Item("Type").ToString 
      Dim B2 As Integer = dataset3.Tables("0").Rows(countz).Item("ID") 
      TextBox3.Text = A2 
      If A2 = CheckBox1.Text Then 
       Dim sql4 As String = "update Medical set MNotes=N'" & TextBox22.Text & "' where FileNo='" & TextBox2.Text & "' and Type = '" & CheckBox1.Text & "' and ID='" & B2 & "';" 
       Dim cmd4 As New SqlCommand(sql4, connection3) 
       Try 
        cmd4.ExecuteNonQuery() 
       Catch ex As Exception 
        MsgBox(ex.Message) 
       End Try 
      ElseIf A2 = CheckBox2.Text Then 
       Dim sql4 As String = "update Medical set MNotes=N'" & TextBox15.Text & "' where FileNo='" & TextBox2.Text & "' and Type = '" & CheckBox2.Text & "' and ID='" & B2 & "';" 
       Dim cmd4 As New SqlCommand(sql4, connection3) 
       Try 
        cmd4.ExecuteNonQuery() 
       Catch ex As Exception 
        MsgBox(ex.Message) 
       End Try 
      End If 
     Next 
    Else 
     If CheckBox1.Checked = True Then 
      Dim sql4 As String = "insert into Medical values('" & CheckBox1.Text & "',N'" & TextBox22.Text & "','" & TextBox2.Text & "')" 
      Dim cmd4 As New SqlCommand(sql4, connection3) 
      Try 
       cmd4.ExecuteNonQuery() 
      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
     End If 
     If CheckBox2.Checked = True Then 
      Dim sql4 As String = "insert into Medical values('" & CheckBox2.Text & "',N'" & TextBox15.Text & "','" & TextBox2.Text & "')" 
      Dim cmd4 As New SqlCommand(sql4, connection3) 
      Try 
       cmd4.ExecuteNonQuery() 
      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
     End If 

    End If 
+0

Какой базы данных вы используете? – zaratustra

+0

Файл базы данных сервера sql – MAX

+1

Вы должны использовать параметры, чтобы сделать что-либо подобное. 'command3.CommandText =" SELECT ID, Type FROM Medical WHERE FileNo = '"& TextBox2.Text & "';" 'является верным методом пожара для приема [SQL-инъекций] (http://en.wikipedia.org/wiki/SQL_injection) – Paul

ответ

1

Я думаю, одна из ваших проблем может быть связано с вашей сокращения количества табличных строк на 1, а затем проверить его выше 0:

Dim count9 As Integer = dataset3.Tables(0).Rows.Count - 1 
If count9 > 0 Then 

Try изменения в:

Кроме того, убедитесь, что один (CheckBox1 или CheckBox2), указанный ниже в вашем коде, отмечен галочкой.

- EDIT -

К сожалению - не объясняет, почему! Причина в том, что большинство структур массива/списка, подобных .NET, основаны на нулевом значении (т. Е. Начинаются с 0 вместо 1).

+0

Исключить исключение из диапазона " нет строки в позиции 1 » – MAX

+0

Какая строка останавливается на программе? – Paul

+0

Также, что находится в' TextBox2'? – Paul

0

Лучший способ действий для вас - максимизировать производительность, позволяя SQL делать то, что он делает лучше всего. Предполагая, что вы используете SQL Server 2008, функция MERGE является отличным вариантом для условий, которые вы предоставили.

Вот очень простой пример, который ухитрился основан на некоторых из кода:

CREATE PROCEDURE [dbo].[csp_Medical_Merge] 
    @MType int, @FileNo varchar(20), @MNotes varchar(max), @ID int, @OtherParams 
AS 
BEGIN 

MERGE INTO [DatabaseName].dbo.Medical AS DEST 
USING 
    ( 
     /* 
      Only deal with data that has changed. If nothing has changed, 
      then move on. 
     */ 
     SELECt @MType, @MNotes, @FileNo, @ID, @OtherParams 
     EXCEPT 
     Select [Type], MNotes, FileNo, ID, OtherFields from [DatabaseName].dbo.Medical 
) As SRC ON SRC.ID = DEST.ID 
WHEN MATCHED THEN 
    UPDATE SET 
     DEST.MNOTES = SRC.MNOTES, 
     DEST.FileNo = SRC.FileNo, 
     DEST.Type = SRC.Type 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (FieldsList) 
    VALUEs (FileNo, MNotes, etc, etc); 

END 
GO 
Смежные вопросы