0

我有一个有趣的情况,我试图将日期(格式为yyyy-MM-dd[ie 2013-08-01] 格式的字符串)传递给 asp.net 网页中的 SQL 存储过程。我已经设置了存储过程,但现在我必须将日期作为参数传递。我需要的日期位于一个单独的 SQL 表中,所以我创建了一个TextBox(我们称之为endDATE)提供我需要的日期并且我可以隐藏它以使其在网页上不可见。

问题是TextBox包含在 aDetailsView中,所以我似乎无法为存储过程访问它。

我在想我应该尝试将字符串从TextBox使用 VB 代码传递到存储过程。我该怎么做呢?

代码TextBox

<asp:DetailsView ID="LatestDate" DataSourceID="SqlDataSource6" runat="server" AutoGenerateRows="false" 
AutoGenerateColumns="False" BorderStyle="None" GridLines="None">
     <Fields>
     <asp:BoundField DataField="MostRecent" HeaderText="" ReadOnly="True" ShowHeader="False"
     DataFormatString="Daily: {0:M/d/yyyy}" ItemStyle-CssClass="boldbig" />
     <asp:TemplateField>
      <ItemTemplate>
       <asp:TextBox runat="server" ID="endDATE" Visible="false" Text='<%# Eval("MostRecent","{0:yyyy-MM-dd}") %>' />
      </ItemTemplate>
     </asp:TemplateField>
     </Fields> 
</asp:DetailsView>

存储过程代码[date1是我要提供的参数]:

<asp:SqlDataSource ID="SqlDataSource7" runat="server"
    ConnectionString="<%$ConnectionStrings:ConnectionString3 %>" 
    ProviderName="<%$ ConnectionStrings:ConnectionString3.ProviderName %>" 
    SelectCommand="dbo.TheMgr_Total"
    SelectCommandType="StoredProcedure">
     <SelectParameters>
       <asp:QueryStringParameter name="MgrName" DbType="String" QueryStringField="id" />
       <asp:Parameter Name="date1" DbType="String" DefaultValue="2013-08-08" />
     </SelectParameters>
</asp:SqlDataSource>

更新:史蒂夫的解决方案对我来说看起来不错,但我一直无法让它发挥作用。我的项目改变了方向,所以我不再处理这个特定的问题。

4

1 回答 1

1

将参数传递给存储过程是一项非常常见的任务,并且有据可查

Dim dateValue as DateTime
dateValue = GetDateFromDetailsView()

Using cn As SqlClient.SqlConnection(conString)
   cn.Open()
   Using cmd AS SqlClient.SqlCommand(cn)
       cmd.CommandText = "storedProcName"
       cmd.CommandType = CommandType.StoredProcedure
       cmd.Parameters.AddWithValue("@theDate", dateValue)
       cmd.ExecuteNonQuery()
   End Using
End Using

当然,您需要将storedProcName@theDate参数替换为其实际值。唯一的问题是检索 DateTime 类型的变量 dateValue。在这里,我需要再次假设您的页面结构,但也许 GetDateFromDetailsView 可以写成

 public Function GetDateFromDetailsView() As String

      Dim txtHiddenText = detailsViewName.FindControl("txtHiddenText")
      return txtHiddenText.Text

 End Function
于 2013-08-13T21:28:24.800 回答