我目前在向数据库中插入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语句的错误所在。
发布于 2013-12-14 01:51:00
语法错误是查询中缺少的结束括号。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();
}
}https://stackoverflow.com/questions/20578762
复制相似问题