gpt4 book ai didi

sql-server - 在 VBA 中执行存储过程的两种方式,哪一种更好?

转载 作者:行者123 更新时间:2023-12-03 16:46:49 27 4
gpt4 key购买 nike

背景:使用前端 Ms-Access 2010 和后端 SQL Server 2008 Management Studio

为了执行存储过程,我一直在使用一个相当冗长的过程,如下所示:在 VBA 中

    Set Conn = New ADODB.connection
Conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;....."
Conn.Open

Set cmd = New ADODB.Command
cmd.ActiveConnection = Conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "upGetTestIdForAnalyte"

cmd.Parameters.Append cmd.CreateParameter("@WOID", adVarChar, adParamInput, 60, MySampleName)
cmd.Parameters.Append cmd.CreateParameter("@Analyte", adVarChar, adParamInput, 60, MyAnalyte)
cmd.Parameters.Append cmd.CreateParameter("@SampleID", adVarChar, adParamInput, 60, MyConcentration

cmd.Execute
Conn.Close

有人告诉我有一种更好的方法来执行存储过程,正确的方法是这样的:在 VBA 中
strsql = "Exec upGetTestIdForAnalyte(WOID, Analyte, SampleID)"
test = ExecuteNonQuery(strsql)

但是我在这个过程中遇到了很多错误,我查找了 ExecuteNonQuery,它说它仅适用于 VB ( http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx )。这个过程的优点之一是它的简洁性和自动连接到当前数据库的事实。我必须更改当前 sp 进程中的连接字符串,因为它设置为链接到测试数据库而不是实际数据库。另一个优点是它在执行时返回一个值。我希望我当前的进程这样做,因为我想以某种方式验证它运行和我需要制作的其他存储过程,需要返回受影响的记录数。

我的问题是:第二种方法是合法的过程吗,那是正确的语法吗?每个过程完成的内容也有什么不同吗?还有没有办法让第一个进程在执行时返回一个值?感谢您的时间。

更新:这是我目前正在处理的存储过程。我的 sp 查看 testID 是否存在,我将在调用 sp 后继续执行程序,如果变量 ThisTestId >0 否则我将引发错误 testid not found
CREATE PROCEDURE upGetTestIDForAnalyte @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60), @Test var(20) output
AS

SELECT TestID = t1.TestID
FROM tblWOSampleTest t1
JOIN tblTest t2
ON t1.TestID=t2.TestID;
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte

GO

最佳答案

此处发布的示例代码太多。

最初的问题是发帖人看到了一些只需要一两行代码的例子。

实际上,此代码有效并将参数传递给存储过程。

With CurrentDb.QueryDefs("MyPass")
.SQL = "exec MySproc" & ProducutID
.Execute
End If

上面只有两行代码。

这种方法的优点是什么?

请注意我们如何不必弄乱(或通过)连接字符串。

请注意我们不必在代码中声明任何连接对象。

请注意,我们不必在代码中的任何位置存储或拥有用户名或密码。

请注意,我们也不必在代码中创建查询定义对象。

事实上,整个过程无需声明任何变量即可工作。

以上可以写在两行代码上,但我决定发布大量的 4 行代码以提高可读性。

这种设置的优点很多,但主要原因是这种方法最简单且易于维护。

此处发布的其他解决方案仅用于迫使人们编写多行代码——这只会增加其雇主的开发成本。

关于sql-server - 在 VBA 中执行存储过程的两种方式,哪一种更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com