[英]MS SQL Server 2008 shows value passed to stored procedure but VB.NET says it isn't
[英]MS SQL 2008 stored procedure problem and vb.net
这已经让我难过了几天。
我在MS SQL 2008服务器上有一个存储过程。 我可以通过Management Studio和我在代码中使用的用户身份进行连接,并执行存储过程,并且可以按我期望的方式工作。 当我尝试在代码中使用它时,就会出现问题。 这是我的代码:
Dim strConn1 As String = "Data Source=server;Initial Catalog=db;User ID=user;Password=pass"
Dim objconn1 As New SqlConnection(strConn1)
Dim objCommand1 As New SqlCommand("storedProcedure", objconn1)
objCommand1.CommandType = Data.CommandType.StoredProcedure
objCommand1.Parameters.AddWithValue("@strEncounter", Encounter)
objCommand1.Parameters.AddWithValue("@NetworkName", Employee)
objconn1.Open()
Dim test = objCommand1.ExecuteNonQuery()
objconn1.Close()
当我运行它时,它什么也没做。 没有例外,没有错误,并且存储了受ExecuteNonQuery方法影响的行数的变量test为1。当我检查数据库以查看应插入的行时,什么也没有。
另一个真正奇怪的是,我在ASP.NET网站中具有相同的代码,并且工作正常。 我已经将其复制并粘贴到此应用程序中,该应用程序是一个表单应用程序,并且无法正常工作。 谢谢。
好吧,由于您使用的是ExecuteNonQuery
,因此应用程序中不会发生“任何事情”。 ExecuteNonQuery
表示将在SQL Server上执行一项操作,并且不要期望返回结果集。
现在,如果期望结果集,则必须使用DataAdapter并将.Fill()一个DataTable对象与结果一起使用:
Dim dt As New DataTable
Dim da As New SqlClient.SqlDataAdapter(objCommand1)
da.Fill(dt)
您只想在插入,更新或删除行时使用ExecuteNonQuery。 当您想将数据读取到客户端应用程序时,必须将其存储在某个位置。 附带说明一下,这是反对复制n粘贴编码的一个论点;)另外,使用混混匈牙利符号(即变量的“ obj”前缀)也可能不合时宜。 像这样更具可读性:
Dim connString As String = "Data Source=server;Initial Catalog=db;User ID=user;Password=pass"
Dim cn As New SqlConnection(connString)
Dim cmd As New SqlCommand("storedProcedure", cn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@strEncounter", Encounter)
cmd.Parameters.AddWithValue("@NetworkName", Employee)
cn.Open()
Dim dt As New DataTable
Dim da As New SqlClient.SqlDataAdapter(cmd)
da.Fill(dt)
cn.Close()
前缀为“ obj”的所有内容使眼睛更难挑选变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.