2014-03-26 110 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.