首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将DateTime插入数据库#2

将DateTime插入数据库#2
EN

Stack Overflow用户
提问于 2013-12-14 01:43:37
回答 1查看 2.6K关注 0票数 0

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

代码语言:javascript
复制
protected void calendar_selectionChanged(object sender, EventArgs e)
    {
        tb_date.Text = calendar.SelectedDate.ToString("dd/M/yyyy", CultureInfo.InvariantCulture);
        calendar.Visible = false;
    }

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

代码语言:javascript
复制
PackingBLL packing = new PackingBLL();
        string msg = "";
        msg = packing.createSession(tb_location.Text, tb_date.Text, tb_volunteerNeeded.Text);
        lbl_msg.Text = msg;

在我的业务逻辑层:

代码语言:javascript
复制
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语句:

代码语言:javascript
复制
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语句的错误所在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-14 01:51:00

语法错误是查询中缺少的结束括号。VALUES语句缺少结束括号。

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

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

附带注意:您应该释放正在使用的连接和命令对象。using关键字对此很好。

示例:

代码语言:javascript
复制
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();
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20578762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档