2014-09-29 114 views
1

我有以下问题,我正在开发一个使用vb.net的诊所应用程序,医生有能力使用复选框添加医疗信息checkbox2.text =“Allergy”textbox15。文本是过敏的注意事项,如果病人的FileNo(Textbox2.text)不存在,我想插入记录,如果它只是更新注释,到目前为止我能够在点击3次按钮后更新它不知道为什么?如果记录存在更新else insert 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 2014-09-29 13:34:52

+0

sql服务器数据库文件 – MAX 2014-09-29 13:36:11

+1

您应该使用参数来执行此类操作。 'command3.CommandText =“选择ID,键入从医疗WHERE FileNo ='”和TextBox2.Text & "';“'是一种确定的接收[SQL注入攻击]的火法(http://en.wikipedia.org/wiki/SQL_injection ) – Paul 2014-09-29 13:38:37

回答

1

我觉得你的问题之一可能与您减少1表格的行数,然后测试它上面0:

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

尝试改用:

此外,确保一个代码中后面提到的复选框(CheckBox1CheckBox2)被勾选。

- 编辑 -

抱歉 - 没有解释为什么!原因是.NET中的大部分数组/列表结构都是基于零的(即从0开始而不是从1开始计数)。

+0

索引超出范围异常“在位置1没有行“ – MAX 2014-09-29 13:54:31

+0

该程序停止在哪条线上? – Paul 2014-09-29 13:55:39

+0

另外,”TextBox2“中有什么? – Paul 2014-09-29 13:56:28

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 
相关问题