将DateTime插入数据库#2

时间:2013-12-14 01:43:38

标签: c# sql sql-server database datetime

我目前在将dateTime值插入数据库时​​遇到问题。首先,我从visual studio 2010中的日历控件中选择一个日期。然后我将日期格式化为dd / M / yyyy格式。这是代码:

protected void calendar_selectionChanged(object sender, EventArgs e)
    {
        tb_date.Text = calendar.SelectedDate.ToString("dd/M/yyyy", CultureInfo.InvariantCulture);
        calendar.Visible = false;
    }

之后,我将用户输入传递给businessLogicLayer:

PackingBLL packing = new PackingBLL();
        string msg = "";
        msg = packing.createSession(tb_location.Text, tb_date.Text, tb_volunteerNeeded.Text);
        lbl_msg.Text = msg;

在我的业务逻辑层中:

public string createSession(string location, string dateStr, string volunteerNeededStr)
    {
        string returnMessage = "";

        if (returnMessage.Length == 0)
        {
            DateTime date = DateTime.ParseExact(dateStr, "dd/M/yyyy", CultureInfo.InvariantCulture);
            int volunteerNeeded = int.Parse(volunteerNeededStr);

            Packing packing = new Packing(location, date, volunteerNeeded);

            int nofRows = 0;
            nofRows = packing.PackingInsert();

            if (nofRows > 0)
                returnMessage = "Packing session record saved successfully.";
            else
                returnMessage = "Error! Please try again.";
        }

        return returnMessage;
    }

然后从那里,我将它们传递到数据访问层以执行Sql语句:

public static int executeNonQuery(string query)
    {
        int result = 0;

        System.Diagnostics.Debug.WriteLine("FFTHDb executeNonQuery: " + query);

        SqlConnection connection = new SqlConnection(connectionString);
        SqlCommand command = new SqlCommand(query, connection);
        connection.Open();
        result = command.ExecuteNonQuery();
        connection.Close();

        return result;
    }

private DateTime _date;

    public DateTime date
    {
        get { return _date; }
        set { _date = value; }
    }

public int PackingInsert()
    {
        int nofRows = 0;
        nofRows = FFTHDb.executeNonQuery("INSERT INTO PackingSession (packingDate, packingLocation, volunteerNeeded) " + 
            " VALUES ('" + date + "' , '" + location + "' , " + volunteerNeeded + "");

        return nofRows;
    }

但是,当我尝试插入数据时,它会一直提示我第10行的语法错误。但是我不知道Sql语句出了什么问题。

1 个答案:

答案 0 :(得分:4)

语法错误是查询中缺少右括号。 VALUES语句缺少右括号。

另一个可能的问题是查询中日期的格式。当您将DateTime值连接到查询中时,ToString方法将用于将其转换为字符串,这意味着它将使用当前文化(无论可能是什么)来执行转换。这可能不是数据库识别的日期格式,也可能是错误解释(例如mm/dd/yyyy而不是dd/mm/yyyy)。

您应该使用参数化查询,以便将参数作为数据类型发送,而不是将它们连接到查询中。

附注:您应该处置正在使用的连接和命令对象。 using关键字对此有用。

示例:

string query =
  "INSERT INTO PackingSession (packingDate, packingLocation, volunteerNeeded) " + 
  "VALUES (@Date, @Location, @VolunteerNeeded)";

using (SqlConnection connection = new SqlConnection(connectionString)) {
  using (SqlCommand command = new SqlCommand(query, connection)) {
    command.Parameters.AddWithValue("@Date", date);
    command.Parameters.AddWithValue("@Location", location);
    command.Parameters.AddWithValue("@VolunteerNeeded", volunteerNeeded);
    connection.Open();
    result = command.ExecuteNonQuery();
    connection.Close();
  }
}