2011-08-10 63 views
1

我想循环通过一个数据表,这将传递信息到我的存储过程,但它不工作。循环通过数据表并运行存储过程

即使它工作时,我manuelly

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
      Dim dv As New DataView 
      Dim dt As New DataTable 
      dv = SqlDataSource1.Select(DataSourceSelectArguments.Empty) 

      dt = dv.ToTable() 


      For Each row As DataRow In dt.Rows 

       If row("vtr_gen10").ToString() = "y" Or row("vn10").ToString() = "a" Or row("vtr_gen10").ToString() = "p" Then 
        Dim SQLCon As New SqlClient.SqlConnection 
        Dim sqlcmd As New SqlCommand 
        SQLCon.ConnectionString = SqlDataSource2.ConnectionString 

        SQLCon.Open() 
        sqlcmd.CommandText = "protest" ' Stored Procedure to Call 
        sqlcmd.CommandType = CommandType.StoredProcedure 'Setup Command Type 
        sqlcmd.Connection = SQLCon 'Active Connection 

        sqlcmd.Parameters.AddWithValue("@ID", row("id")) 
        sqlcmd.Parameters.AddWithValue("@Value", "Y") 


        sqlcmd.ExecuteNonQuery() 
        SQLCon.Close() 

       End If 

      Next 

     End Sub 
+0

你是什么意思“不工作?”你是否浏览了代码,看看'For Each'中的代码是否正在运行,或者你的'If'代码块是否正在运行? – Jacob

+0

当我instert一个断点,我没有看到任何事情发生,没有什么被添加到我的目的地表,这让我觉得存储过程不运行 –

+0

当你在你的Sub的第一个语句设置断点时,断点是否被打?如果没有,那么问题可能是你没有正确设置你的事件处理程序。如果确实如此,那么你应该能够遍历代码并查看你的Select语句返回的内容。 – Jacob

回答

0

正尝试加入睡眠你绝对确定在前两条记录后IF标准得到满足?有一点要注意的是空格或其他字符串异常,例如Carraige在您的数据库中返回...

行(“vn10”)。ToString例如可能由于某种原因是“a”而不是“a”。可能值得加入临时调试线,如:

Throw New Exception("[" & Row("vn10").ToString & "]") 

或检查某些错误失败记录的长度。

0

没有什么似乎是你的代码错误,但如果你认为它的,因为它的速度太快了,用System.Threading.Thread.Sleep(milliseconds)

+0

嗯这没有工作 –