Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果存在,请更新。否则请插入。连接超时错误_Sql_Asp.net_Vb.net_Insert - Fatal编程技术网

Sql 如果存在,请更新。否则请插入。连接超时错误

Sql 如果存在,请更新。否则请插入。连接超时错误,sql,asp.net,vb.net,insert,Sql,Asp.net,Vb.net,Insert,我的代码的问题是我可以正确地插入到数据库中,但如果它将更新,则 连接超时。因此,为了澄清我的问题,我的插入代码可以工作,但更新不能 这是我的密码: Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click Dim strConnString As String = DataSource.ConnectionString Using con As New SqlCon

我的代码的问题是我可以正确地插入到数据库中,但如果它将更新,则 连接超时。因此,为了澄清我的问题,我的插入代码可以工作,但更新不能

这是我的密码:

  Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click

    Dim strConnString As String = DataSource.ConnectionString
    Using con As New SqlConnection(strConnString)
        Using cmd As New SqlCommand()

            Dim base64String = TextArea1.Value
            Dim imageBytes As Byte() = Convert.FromBase64String(base64String)
            Dim ImageTypeDataOfImage As New SqlParameter("@Data", SqlDbType.Image)
            ImageTypeDataOfImage.Value = imageBytes


            Dim SQLStr As String
            SQLStr = " IF EXISTS (SELECT * FROM [Patient_Data].[dbo].[tbPatientImage]   where HospNum='" & Session.Item("HospNum") & "' and IDNum='" & Session.Item("IDNum") & "' and FileType= '" & lblHeader.Text & "')  " & _
                     " UPDATE [Patient_Data].[dbo].[tbPatientImage] SET PatImage= @Data where HospNum='" & Session.Item("HospNum") & "' and IDNum='" & Session.Item("IDNum") & "' and FileType= '" & lblHeader.Text & "'  " & _
                     " else INSERT INTO [Patient_Data].[dbo].[tbPatientImage](HospNum,IDNum, DoctorID, PatImage , FileType, FileName, TransDATE) VALUES ('" & Session.Item("HospNum") & "','" & Session.Item("IDNum") & "', '" & Session.Item("DoctorID") & "', @Data, '" & lblHeader.Text & "', 'PatientPhoto' ,  GETDATE()) "

            cmd.CommandText = SQLStr
            cmd.Parameters.Add(ImageTypeDataOfImage)
            cmd.Connection = con
            con.Open()
            cmd.ExecuteNonQuery()
            con.Close()

        End Using
    End Using
End Sub

看起来您没有
COMMIT
ing或
ROLLBACK
ing您的事务

Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click

Dim strConnString As String = DataSource.ConnectionString
Using con As New SqlConnection(strConnString)
    Using cmd As New SqlCommand()
    Dim base64String = TextArea1.Value
    Dim imageBytes As Byte() = Convert.FromBase64String(base64String)
    Dim ImageTypeDataOfImage As New SqlParameter("@Data", SqlDbType.Image)
    ImageTypeDataOfImage.Value = imageBytes

    Dim transaction As SqlTransaction

    transaction = con.BeginTransaction("MyTransaction");

    Dim SQLStr As String
    SQLStr = " IF EXISTS (SELECT * FROM [Patient_Data].[dbo].[tbPatientImage]   where HospNum='" & Session.Item("HospNum") & "' and IDNum='" & Session.Item("IDNum") & "' and FileType= '" & lblHeader.Text & "')  " & _
             " UPDATE [Patient_Data].[dbo].[tbPatientImage] SET PatImage= @Data where HospNum='" & Session.Item("HospNum") & "' and IDNum='" & Session.Item("IDNum") & "' and FileType= '" & lblHeader.Text & "'  " & _
             " else INSERT INTO [Patient_Data].[dbo].[tbPatientImage]

(HospNum,IDNum, DoctorID, PatImage , FileType, FileName, TransDATE) VALUES ('" & Session.Item("HospNum") & "','" & Session.Item("IDNum") & "', '" & Session.Item("DoctorID") & "', @Data, '" & lblHeader.Text & "', 'PatientPhoto' ,  GETDATE()) "

            cmd.CommandText = SQLStr
            cmd.Parameters.Add(ImageTypeDataOfImage)
            cmd.Connection = con
            cmd.Transaction = transaction
            con.Open()
            cmd.ExecuteNonQuery()

            transaction.Commit()

            con.Close()

        End Using
    End Using
End Sub
这意味着,您的上一个会话仍然保持对行的锁定,您尝试更新,尽管您关闭了连接。因此,下一次,当接收到同一记录的更新时,数据库会识别出,有另一个会话在该记录上持有锁,因此除非该记录被释放,否则无法对其执行更多的更新或删除。。而且,这会无限期地等待,导致你超时

鉴于,每个
插入项都将是一个新条目,因此是前一个条目。行级锁不会影响它们。在关闭连接之前,在DBA的帮助下,尝试终止所有这些会话,并在代码中包含COMMIT

有一些示例演示如何提交事务

Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click

Dim strConnString As String = DataSource.ConnectionString
Using con As New SqlConnection(strConnString)
    Using cmd As New SqlCommand()
    Dim base64String = TextArea1.Value
    Dim imageBytes As Byte() = Convert.FromBase64String(base64String)
    Dim ImageTypeDataOfImage As New SqlParameter("@Data", SqlDbType.Image)
    ImageTypeDataOfImage.Value = imageBytes

    Dim transaction As SqlTransaction

    transaction = con.BeginTransaction("MyTransaction");

    Dim SQLStr As String
    SQLStr = " IF EXISTS (SELECT * FROM [Patient_Data].[dbo].[tbPatientImage]   where HospNum='" & Session.Item("HospNum") & "' and IDNum='" & Session.Item("IDNum") & "' and FileType= '" & lblHeader.Text & "')  " & _
             " UPDATE [Patient_Data].[dbo].[tbPatientImage] SET PatImage= @Data where HospNum='" & Session.Item("HospNum") & "' and IDNum='" & Session.Item("IDNum") & "' and FileType= '" & lblHeader.Text & "'  " & _
             " else INSERT INTO [Patient_Data].[dbo].[tbPatientImage]

(HospNum,IDNum, DoctorID, PatImage , FileType, FileName, TransDATE) VALUES ('" & Session.Item("HospNum") & "','" & Session.Item("IDNum") & "', '" & Session.Item("DoctorID") & "', @Data, '" & lblHeader.Text & "', 'PatientPhoto' ,  GETDATE()) "

            cmd.CommandText = SQLStr
            cmd.Parameters.Add(ImageTypeDataOfImage)
            cmd.Connection = con
            cmd.Transaction = transaction
            con.Open()
            cmd.ExecuteNonQuery()

            transaction.Commit()

            con.Close()

        End Using
    End Using
End Sub

这一排有一把锁?你说有锁是什么意思?请解释一下我有点新。这看起来容易受到SQL注入的攻击。谢谢你的回复。先生,你有这个的代码样本吗?我将使用sqltransaction.commit?我添加了文档参考。请核对一下。你好。我在放置代码时遇到问题。您能编辑我的代码并粘贴到这里吗?我已经将您的代码添加到我的代码中,但是错误连接超时仍然发生。必须删除现有的锁。。希望这有帮助。我们的新代码,只是避免了未来的锁。