2011-05-06 43 views
0

我对VB很新,我不确定为什么这不起作用,基本上我试图从我的Web代码运行存储过程。 sp在SQL中运行得很好,我试了几次,所以我确信这不是问题。我不想返回任何结果,如果它运行,我只想看到一个“ok”语句,如果没有,就会看到一条错误消息。我用于标记的代码(警告和确认)从早期在同一页面上重用,验证(valUpload)也是如此。我相信,解决方法很简单...从VB.NET调用存储过程的问题

Protected Sub RunValidation_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RunValidation.Click 
    Try 
     Dim bl As New BL.ORG 
     Dim db As Database = DatabaseFactory.CreateDatabase("MyConnection") 
     Dim dbCommand As DbCommand 

     db = DatabaseFactory.CreateDatabase("MyConnection") 
     dbCommand = db.GetStoredProcCommand("Company.dbo.uspMyStoredProcedure") 
     dbCommand.CommandTimeout = 300 
     db.AddInParameter(dbCommand, "ClientID", DbType.String, ddlCompany.SelectedValue) 
     db.AddInParameter(dbCommand, "startPeriod", DbType.String, ddlStartPeriod.SelectedValue) 
     db.ExecuteDataSet(dbCommand) 

     lblWarning.Text = "Please confirm that the <strong>ClientID and startPeriod </strong> are populated in the dropdown list." 
     lblWarning.Visible = True 
     lblConfirmation.Visible = False 

    Catch ex As Exception 
     valUpload.ErrorMessage = "There has been an unexpected error generating the page<br>(" + Err.Description + ")" 
     valUpload.IsValid = False 
    End Try 
End Sub 
+2

如果您告诉我们它在什么意义上不起作用,那么解决方案就更简单了。你会收到错误消息吗?哪个行号?错误说的是什么?什么是堆栈跟踪?你的连接字符串是否正确? – mellamokb 2011-05-06 18:59:43

+0

你不应该使用SqlCommand而不是DbCommand吗? – 2011-05-06 19:07:36

+0

希望这会回答一些问题:1,它不运行存储过程,据我所知。没有结果进入我的表,即使应该(当我以后运行SQL中的SP它填充罚款)2,没有错误信息,它似乎运行得很好,这就是为什么它是如此令我沮丧,我真的当我甚至没有收到错误信息时,不知道从哪里开始。我可以上传页面,并且它们全都运行,或者至少看起来运行得很好。我遗漏的任何其他信息? – 2011-05-06 19:49:30

回答

0

我觉得这里的问题是线

db.ExecuteDataSet(dbCommand) 

从我所看到的,你要运行的命令是

db.ExecuteNonQuery(dbCommand) 

以下是一个示例网站。代码是用C#编写的,但我认为你可以对它有基本的了解。如果你真的需要的话,你也可以使用翻译器。

http://msdn.microsoft.com/en-us/magazine/cc188702.aspx#S2

0

我将它改写为类似于这样:

Protected Sub RunValidation_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RunValidation.Click 
    Using cnn As New SqlClient.SqlConnection("MyConnection") 
    cnn.Open() 

    Using cmd As New SqlClient.SqlCommand("Company.dbo.uspMyStoredProcedure", cnn) 
     cmd.CommandTimeout = 30 
     cmd.Parameters.Add(New SqlClient.SqlParameter("ClientID", SqlDbType.NVarChar, 50) With {.Value = ddlCompany.SelectedValue}) 
     cmd.Parameters.Add(New SqlClient.SqlParameter("startPeriod", SqlDbType.NVarChar, 50) With {.Value = ddlStartPeriod.SelectedValue}) 

     Try 
     cmd.ExecuteNonQuery() 
     Catch ex As Exception 
     valUpload.ErrorMessage = "There has been an unexpected error generating the page<br>(" + Err.Description + ")" 
     valUpload.IsValid = False 
     End Try 

     lblWarning.Text = "Please confirm that the <strong>ClientID and startPeriod </strong> are populated in the dropdown list." 
     lblWarning.Visible = True 
     lblConfirmation.Visible = False 

    End Using 
    End Using 
End Sub 

的几个注意事项:

  • 裹尽可能少的代码尽可能在一个try-catch。在这种情况下,只有数据库应该是引起关注的原因(允许您验证输入)。
  • using statement非常整洁地处理您的连接和命令对象以防出现问题。
  • 您可能想重构代码,甚至可以进一步将数据库调用部分保存在单独的函数/子目录中,并将标签和UI消息设置在其他位置。