繁体   English   中英

MS SQL 2008存储过程问题和vb.net

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM