【问题标题】:Adding record set values to stored procedure parameters - Classic ASP将记录集值添加到存储过程参数 - 经典 ASP
【发布时间】:2017-07-21 02:32:12
【问题描述】:

我正在尝试将每一行添加到我的存储过程参数中。我的记录集有 6 列,我正在使用记录集来检索这些列的值并将它们添加到存储过程中。我被困在下面,无法检索我的记录集的列值。
你认为我在下面做的事情是正确的还是有任何其他方法可以从记录集中检索列值

If not rs.EOF and rs.BOF Then               
                For Each col in rs.Fields               
                    rsAdd(Replace(col.Name,"_","")) = col.Value
                    cmd.Parameters("@id") = col.Name(Replace(col.Name,"_","")).value
                Next            
        End If

更新:这是在 Josh 建议我将所有值硬编码为参数后我所做的。

这不是执行存储过程。但是我知道我的存储过程可以正常工作,因为我已经使用 SSMS 中的示例数据执行了它。

记录集有数据,所以我猜代码有问题。

Set rs = GetRecordSet("C:\upload\new\" & TheNewFileName2)
    'Response.Write "No Errors"
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.ConnectionString="DSN=ABCD"
    cn.Open
    Set cmd = Server.CreateObject("ADODB.Command")
    cmd.ActiveConnection = cn
    cmd.CommandType = 4     
    cmd.CommandText = "[dbo].[uspSearchData]"       


    While not rs.EOF and rs.BOF 

                cmd.Parameters.Append cmd.CreateParameter("@id",3,1,rs("Merchant_ID"))
                cmd.Parameters.Append cmd.CreateParameter("@name",200,1,255,rs("Name"))
                cmd.Parameters.Append cmd.CreateParameter("@address",200,1,255,rs("Address"))
                cmd.Parameters.Append cmd.CreateParameter("@city",200,1,255,rs("City"))
                cmd.Parameters.Append cmd.CreateParameter("@state",200,1,255,rs("State"))
                cmd.Parameters.Append cmd.CreateParameter("@zip",200,1,255,rs("Zip"))
                cmd.Parameters.Append cmd.CreateParameter("@country",200,1,255,rs("Country")) 
                cmd.Parameters.Append cmd.CreateParameter("@phone",200,1,255,rs("Phone")) 
                cmd.Parameters.Append cmd.CreateParameter("@emailid",200,1,255,rs("Web_Address")) 
                cmd.Parameters.Append cmd.CreateParameter("@awardlevel",200,1,255,rs("Award_Level")) 
                cmd.Parameters.Append cmd.CreateParameter("@awardvalue",200,1,255,rs("Award_Value"))
                cmd.Parameters.Append cmd.CreateParameter("@awarddays",200,1,255,rs("Award_Days"))
                cmd.Parameters.Append cmd.CreateParameter("@bestlogo",200,1,255,rs("BestLogo")) 
                cmd.Parameters.Append cmd.CreateParameter("@twitter",200,1,255,rs("Twitter"))
                cmd.Parameters.Append cmd.CreateParameter("@facebook",200,1,255,rs("Facebook")) 
                cmd.Parameters.Append cmd.CreateParameter("@electronicprogram",200,1,255,rs("Electronic_Program"))

                cmd.Execute
                rs.MoveNext         
    Wend

    rs.Close
    Set cmd = Nothing
    Set rs = Nothing

    cn.Close
    Set cn = Nothing

【问题讨论】:

  • 您遇到的任何具体错误?
  • @MithileshIndurkar 没有错误。应用程序运行但数据库未执行。不过,所有连接字符串都是准确的。我已更新代码以使用存储过程,但它也失败了。
  • 如果它没有更新,我认为发生了错误。你有错误吗?
  • 不,我没有收到任何错误。
  • While Not rs.EOF And rs.BOF While (Not rs.EOF) And rs.BOF 相同,因此您现在可能甚至进入了循环。你的意思可能是While Not rs.EOF And Not rs.BOF

标签: vbscript asp-classic


【解决方案1】:

你认为我下面的做法是对的还是有其他方法 从记录集中检索列值

如果您只有 6 列,最好只对每一行进行硬编码,而不是使用循环遍历每一列。只有当它们的数据类型和大小都相同时,才能循环遍历每一列

【讨论】:

    【解决方案2】:

    我想通了。我正在检查文件结束,如果不是 EOF,则进入循环。但是也有 BOF,我没有检查“Not BOF”,这就是原因,值没有插入到数据库中。我的最终工作代码如下。

    Set rs = GetRecordSet("C:\upload\new\" & TheNewFileName2)
        'Response.Write "No Errors"
        Set cn = Server.CreateObject("ADODB.Connection")
        cn.ConnectionString="DSN=ABCD"
        cn.Open
        Set cmd = Server.CreateObject("ADODB.Command")
        cmd.ActiveConnection = cn
        cmd.CommandType = 4     
        cmd.CommandText = "[dbo].[uspSearchData]"       
    
    
        While not rs.EOF and not rs.BOF 
    
                    cmd.Parameters.Append cmd.CreateParameter("@id",3,1,rs("Merchant_ID"))
                    cmd.Parameters.Append cmd.CreateParameter("@name",200,1,255,rs("Name"))
                    cmd.Parameters.Append cmd.CreateParameter("@address",200,1,255,rs("Address"))
                    cmd.Parameters.Append cmd.CreateParameter("@city",200,1,255,rs("City"))
                    .
                    .
                    .
                    .
                    cmd.Execute
                    rs.MoveNext         
        Wend
    
        rs.Close
        Set cmd = Nothing
        Set rs = Nothing
    
        cn.Close
        Set cn = Nothing
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多