简体   繁体   中英

Getting SQL Server error: “There is already an object named '<my table>' in the database. ” when table is NOT in database

In my Visual Basic 2013 ASP.NET web application project running on Windows 7 Pro, I get this error every time I run it.

If I drop my table before running it, my app creates table, but I get error.

If table exists before running it, app tries to create table, ignores error and continues, but I get error.

The Page_Load function steps through as expected, without error, to the end.

And then the error occurs.

Imports System.Data.SqlClient

Public Class WebForm2

    Inherits System.Web.UI.Page


    Private ConnectionString As String = "Integrated Security=SSPI;" + "Initial Catalog=;" + "Data Source=localhost;"
    Private reader As SqlDataReader = Nothing
    Private conn As SqlConnection = Nothing
    Private cmd As SqlCommand = Nothing
    Private sql As String = Nothing

    Public Const DEBUG_DEFAULT_CLIENT_ID = "NATIONS_BURGERS"
    Public Const DEBUG_DEFAULT_JOB_ID = "FRY_COOK_2014_07_05"
    Public client_ID
    Public job_ID
    Public client_job_table

    ' InitializeS the job application page. 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Initialize data: 
        client_ID = DEBUG_DEFAULT_CLIENT_ID
        job_ID = DEBUG_DEFAULT_JOB_ID
        client_job_table = client_ID + "_" + job_ID

        ' App selects client job table : 
        Dim command_successful =
        ExecuteSQLStmt(" select * from " + client_job_table)
        ' Create table if it doesn't exist:
        If Not command_successful Then
            ExecuteSQLStmt("CREATE TABLE " + client_job_table + _
                        "(" + _
                        "FIRST_NAME varchar(255)," + _
                        "LAST_NAME varchar(255)," + _
                        "PHONE varchar(255)" + _
                        ");")

        End If

        set_22_button.Visible = GridView1.Visible
        set_333_button.Visible = GridView1.Visible
    End Sub


' Sends sql command to ehires database.
Private Function ExecuteSQLStmt(ByVal sql As String)
    ' Open the connection

    ConnectionString = "Data Source=<my IP>;Initial Catalog=<my database name>;Persist Security Info=True;User ID=Doug;Password=ThankYou!!"
    Dim connection As New SqlConnection(ConnectionString)

    connection.ConnectionString = ConnectionString
    connection.Open()
    cmd = New SqlCommand(sql, connection)
    Dim command_successful = True
    On Error Resume Next
    cmd.ExecuteNonQuery()
    If Err.Number Then
        command_successful = False
        Dim reason = Err.Description
    Else
        command_successful = True
    End If
    connection.Close()
    Return command_successful
End Function  'ExecuteSQLStmt 

Your connection string doesn't specify the catalog name (the database name) so your query is executed against the "MASTER" database. If you look there probably you will find the table that you think is not present

Private ConnectionString As String = @"Integrated Security=SSPI;" & _
                                      "Initial Catalog=.....database name here;" & _
                                      "Data Source=localhost;"

The problem was that I was using a GridView UI control to look at the table, but the GridView was not being updated, so never showed that table was already there.

Problem solved by updating GridView.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM