2014-03-26 140 views
0

我有兩個單獨的INSERT語句,我想依次運行, 第一個成功運行,但它似乎甚至沒有得到第二個語句的任何想法爲什麼?執行兩個INSERT語句

Try 
    con.Open() 
    cmd.ExecuteNonQuery() 
    resultSQL.ForeColor = Drawing.Color.Green 
    resultSQL.Text = "Successfully Saved" 

Catch ex As Exception 
    Response.Write(ex.Message) 
    resultSQL.ForeColor = Drawing.Color.Red 
    resultSQL.Text = ex.Message 

Finally 

End Try 

INSERT 2其中沒有運行:

strQuery = "INSERT INTO [SD_EPOS_Entry]" _ 
    & " ([Trade_Activity_Code] " _ 
    & " VALUES " _ 
    & " (@Trade_Activity_Code1)" 

cmd = New SqlCommand(strQuery) 

cmd.Parameters.AddWithValue("@Trade_Activity_Code1", tcodeVar) 

Try 

    con.Open() 
    cmd.ExecuteNonQuery() 
    resultSQL.ForeColor = Drawing.Color.Green 
    resultSQL.Text = "Successfully Saved2" 

Catch ex As Exception 

    Response.Write(ex.Message) 
    resultSQL.ForeColor = Drawing.Color.Red 
    resultSQL.Text = ex.Message 

Finally 
+0

由於您在上一次插入中沒有關閉它,是否'con'已經打開?你在那部分出現錯誤嗎? –

+0

@ shree.pat18好點!我會糾正這個問題,不會產生錯誤 – neeko

+2

你能展示整個方法嗎? – Crono

回答

1

馬上蝙蝠似乎是在你的第二個查詢丟失的圓括號:

strQuery = "INSERT INTO [SD_EPOS_Entry]" _ 
     & " ([Trade_Activity_Code] " _ 
     & " VALUES " _ 
     & " (@Trade_Activity_Code1)" 

它應該是:

strQuery = "INSERT INTO [SD_EPOS_Entry]" _ 
     & " ([Trade_Activity_Code]) " _ 
     & " VALUES " _ 
     & " (@Trade_Activity_Code1)" 

我還建議妥善處理任何SqlCommand和通過使用Dispose()方法或在Using語句中聲明它們,可以創建3210個實例。

如果你說你的第二個查詢甚至沒有達到,請在運行時用調試程序跟蹤你的代碼,並查看它停止的點。這是爲了提供一些線索。

UPDATE:

這應該在執行一次操作你都INSERT語句:

strQuery = "INSERT INTO [SD_T_Code]" _ 
    & " ([Trade_Activity_Code]) " _ 
    & " VALUES " _ 
    & " (@Trade_Activity_Code)" _ 
    & ";INSERT INTO [SD_EPOS_Entry]" _ 
    & " ([Trade_Activity_Code]) " _ 
    & " VALUES " _ 
    & " (@Trade_Activity_Code)" 

Dim strMessage As String = "Successfully saved" 
Dim resultColor As Drawing.Color = Drawing.Color.Green 

Using cmd = New SqlCommand(strQuery, con) 
    cmd.Parameters.AddWithValue("@Trade_Activity_Code", tcodeVar) 

    Try 
     con.Open() 
     cmd.ExecuteNonQuery() 
     resultSQL.ForeColor = Drawing.Color.Green 
     resultSQL.Text = "Successfully Saved" 
    Catch ex As SqlException 
     strMessage = ex.Message 
     resultColor = Drawing.Color.Red 
    Finally 
     con.Close() 
    End Try 
End Using 

// Write results outside of db operation 
Response.Write(strMessage) 
resultSQL.ForeColor = resultColor 
resultSQL.Text = strMessage 

當然,上述假設有一個實例化,未開封CON連接變量存在。

請注意,它只承襲SqlException。在這裏抓住基本的Exception似乎是錯的。

第二次更新:

如果上面的代碼不能正常工作,這個問題可以由SQL觸發器引起的。

+0

感謝您的回覆,這可能是由於我削減插入查詢只是爲了例子,每個插入自行工作良好 – neeko

+0

再次感謝,你是否在第一個'Values Trade_Activity_Code'行缺少'_'或者是故意的? – neeko

+0

@neeko那不是故意的。編輯。 – Crono

0

某處在代碼中未示出,要分配到該命令對象的連接(這是第一個查詢)。

當你到達第二個查詢時,你將把cmd對象重新定義爲一個新對象,這也刪除了前面建立的對連接的任何引用。

試試這個爲你的代碼第二塊:

strQuery = "INSERT INTO [SD_EPOS_Entry]" _ 
    & " ([Trade_Activity_Code] " _ 
    & " VALUES " _ 
    & " (@Trade_Activity_Code1)" 

cmd = New SqlCommand(strQuery, cnn) 'Define the connection to be used for the command.