2010-06-21 34 views
0

我想添加一种方法来查看下面的代码中是否已经存在连接的数据库中。如果是,则不要添加条目并弹出一个对话框,说明"already been scanned"的影响,如果不是,则照常进行。查询数据库并插入(如果不存在)

Using connection As New SqlClient.SqlConnection("Data Source=XXXXX;Initial Catalog=XXXXXX;Integrated Security=True;Pooling=False;Encrypt=False"), _ 
    cmd As New SqlClient.SqlCommand("INSERT INTO [XXXXX] (TrackingNumber, Date) SELECT @TrackingNumber, @Date WHERE NOT EXISTS (SELECT * FROM([XXXXX])WHERE TrackingNumber = @TrackingNumber AND Date = @Date)", connection) 
     cmd.Parameters.Add("@TrackingNumber", SqlDbType.VarChar, 50).Value = TrNum 
     cmd.Parameters.Add("@Date", SqlDbType.DateTime, 8).Value = TrDate 
     connection.Open() 
     cmd.ExecuteNonQuery() 
     connection.Close() 
End Using 

回答

0

我VB.NET可能有点过,但希望这应该给一般的想法!

Dim rowsAffected AS Integer 

    Using connection As New SqlClient.SqlConnection("Data Source=XXXXX;Initial Catalog=XXXXXX;Integrated Security=True;Pooling=False;Encrypt=False"), _ 
     cmd As New SqlClient.SqlCommand("INSERT INTO [XXXXX] (TrackingNumber, Date) SELECT @TrackingNumber, @Date WHERE NOT EXISTS (SELECT * FROM [XXXXX] WHERE TrackingNumber = @TrackingNumber)", connection) 
     cmd.Parameters.Add("@TrackingNumber", SqlDbType.VarChar, 50).Value = TrNum 
     cmd.Parameters.Add("@Date", SqlDbType.DateTime, 8).Value = TrDate 
     connection.Open() 
     rowsAffected = cmd.ExecuteNonQuery() 
     connection.Close() 
    End Using 


If rowsAffected = 0 Then 
MsgBox "Scanned Already" 
Else 
MsgBox "Inserted Succesfully" 
End If 
+0

工作正常!谢谢一堆! – 0bfus 2010-06-21 18:56:29

+0

@Martin Smith更快速的一件事,任何原因都不允许字母和数字输入? – 0bfus 2010-06-22 13:39:58

+0

@ 0bfus我看不出任何理由为什么会这样。 @TrackingNumber是varchar(50),所以应该允许使用字母。它会给你一个错误? – 2010-06-22 13:52:12

1

你应该能够把你的投入,用于检查冗余的子查询:

INSERT INTO [XXXXXXX] (TrackingNumber, Date) 
    SELECT @TrackingNumber, @Date from DUAL 
    WHERE NOT EXISTS (
     SELECT * 
     FROM [XXXXXXX] 
     WHERE TrackingNumber = @TrackingNumber AND Date = @Date) 
+0

我得到一个SqlException是在cmd.ExecuteNonQuery的无效对象名称DUAL的未处理的错误。在原来的代码中会放置一个子查询? – 0bfus 2010-06-21 16:45:33

+1

@ 0bfus - 对于SQL Server,只需从'DUAL'中删除''''就可以得到受影响的行作为'cmd.ExecuteNonQuery'的返回值。如果零没有改变。 – 2010-06-21 16:57:24

+0

使用上面的代码我得到一个SQL异常是在cmd.ExecuteNonQuery()说未正确的语法附近未处理的错误)。我更新了我的问题中的代码,以显示迄今为止我所做的更改。 – 0bfus 2010-06-21 17:12:36

相关问题