ASP.NET / VB日期适用于localhost但不适用于remoteserver

时间:2017-02-25 15:57:30

标签: asp.net sql-server vb.net datetime

我在尝试从DateTime选择器中获取日期以保存到我的数据库时遇到了很多麻烦。它从Localhost运行时工作正常,但在公共服务器上运行时它不会。 最初我使用了cDate函数,还尝试了Convert.ToDateTime。但是在服务器上它现在给我一个错误"字符串未被识别为有效的DateTime。"

我研究并发现它最好使用DateTime.TryParse函数。找到一个例子后,我为我的项目更改了它,现在我得到了错误"必须声明标量变量" @ articledate"。"

当我调试项目时,将值添加到" result1" DateTime是正确的。但它仍然会在ExecuteNonQuery中抛出错误?

如果它有所不同,主服务器托管GoDaddy,Localhost是我的PC。

非常感谢任何帮助或建议。

    cnSQL1 = New SqlConnection(MSSQL.cRemoteConnectionString)
    cnSQL1.Open()
    sSQL = "SELECT NewsID FROM News WHERE Season = @season AND Heading = @heading AND ArticleDate = @articledate AND Author = @author AND Club = @club AND State = @state AND AddedDate = @addeddate AND AddedBy = @addedby AND Release = @release"
    Dim com1 As New SqlCommand(sSQL)
    com1.Connection = cnSQL1
    com1.Parameters.AddWithValue("@season", General.sSeason)
    com1.Parameters.AddWithValue("@heading", General.UppercaseFirstLetter(txtHeading.Text))
    Dim result1 As DateTime
    com.Parameters.AddWithValue("@articledate", DateTime.TryParseExact(txtArticleDate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, result1))
    'com1.Parameters.AddWithValue("@articledate", Convert.ToDateTime(txtArticleDate.Text))
    com1.Parameters.AddWithValue("@author", txtAuthor.Text)
    com1.Parameters.AddWithValue("@club", ddlClub.SelectedItem.Value)
    com1.Parameters.AddWithValue("@state", dsState.Tables(0).Rows(0).Item(0))
    com1.Parameters.AddWithValue("@addeddate", Date.Today)
    com1.Parameters.AddWithValue("@addedby", Session("UserID"))
    com1.Parameters.AddWithValue("@updatedate", Date.Today)
    com1.Parameters.AddWithValue("@updateby", Session("UserID"))
    com1.Parameters.AddWithValue("@release", s)
    com1.ExecuteNonQuery()

1 个答案:

答案 0 :(得分:1)

错误"必须声明标量变量" @ articledate" 是由拼写错误引起的。添加参数时,应使用名为 com1 的SqlCommand变量而不是变量 com

但在此之后你会遇到更严重的错误。所有TryParse方法都返回布尔值。转换后的日期写在传递给TryParse的最后一个参数中。

通过这种方式,您将布尔值传递给com,此方法将接受您在value参数中放置的任何内容。它无法知道你想要一个约会,所以它很乐意遵守你的要求。

你应该这样做(注意要使用的SqlCommand是Dim result1 As DateTime if DateTime.TryParseExact(txtArticleDate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, result1) Then com1.Parameters.AddWithValue("@articledate", resul1) Else ..... 而不是if DateTime.TryParseExact(txtArticleDate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, result1) Then com1.Parameters.Add("@articledate", SqlDbType.Datetime).Value = result1 com1.Parameters.AddWithValue("@season", General.sSeason) com1.Parameters.AddWithValue("@heading", General.UppercaseFirstLetter(txtHeading.Text)) com1.Parameters.AddWithValue("@author", txtAuthor.Text) com1.Parameters.AddWithValue("@club", ddlClub.SelectedItem.Value) com1.Parameters.AddWithValue("@state", dsState.Tables(0).Rows(0).Item(0)) com1.Parameters.AddWithValue("@addeddate", Date.Today) com1.Parameters.AddWithValue("@addedby", Session("UserID")) ' This is not used by the query, commented out ' com1.Parameters.AddWithValue("@updatedate", Date.Today) ' This is not used by the query, commented out ' com1.Parameters.AddWithValue("@updateby", Session("UserID")) com1.Parameters.AddWithValue("@release", s) com1.ExecuteNonQuery() Else MessageBox.Show("Date is not valid") End If

ObjectCreate( chart_ID,                           // ref. doc
              anInterimObjNAME,                   //      a name to be used
              OBJ_FIBO,                           //      a type of GUI-obj to draw
              0,                                  //      sub-window
              time1, price1,                      //      where to start
              time2, price2                       //      where to finish
              );

一般情况下,avoid AddWithValue更好,因为它会传递给你的任何内容。首选方法是

//--- set how many levels you want to paint
      ObjectSetInteger( chart_ID,
                        anInterimObjNAME,
                        OBJPROP_LEVELS,
                        levels
                        );

//--- set the properties of each of the level
   for (  int i = 0; i <  levels; i++ )
   {      ObjectSetDouble(  chart_ID, anInterimObjNAME, OBJPROP_LEVELVALUE, i, values[i] ); // level value
          ObjectSetInteger( chart_ID, anInterimObjNAME, OBJPROP_LEVELCOLOR, i, colors[i] ); // level color
          ObjectSetInteger( chart_ID, anInterimObjNAME, OBJPROP_LEVELSTYLE, i, styles[i] ); // level style
          ObjectSetInteger( chart_ID, anInterimObjNAME, OBJPROP_LEVELWIDTH, i, widths[i] ); // level width
          ObjectSetString(  chart_ID, anInterimObjNAME, OBJPROP_LEVELTEXT,  i, DoubleToString( 100 * values[i], 1 ) ); // level description
          }

我还删除了上面查询中未使用的两个参数(尽管它们不应该导致上面的错误消息)