在 ASP 中的 Date 之后查询数据库会引发不正确的语法异常
本文关键字:不正确 异常 语法 数据库 中的 ASP Date 之后 查询 | 更新日期: 2023-09-27 18:37:15
我一直在努力从asp数据库表中获取日期,我使用以下查询进行了管理:
SELECT p.nume, n.data_inceput,n.data_sfarsit,n.pret,n.id FROM hotel p ,rezervare n where p.ID = n.id_hotel and (CONVERT(nvarchar(10), n.data_inceput, 101) LIKE '%date%'
这个查询显然是有效的(天知道我搜索了多少,直到我偶然发现那个转换)。
但是,当我尝试在代码中执行此操作时,我得到:
Incorrect syntax near '%09/11/2014%'.
Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near '%09/11/2014%'.
Source Error:
Line 18: conn.Open();
Line 19: SqlCommand cmd = new SqlCommand(query, conn);
Line 20: SqlDataReader reader = cmd.ExecuteReader();
Line 21: FillTable(reader);
Line 22: conn.Close();
第 20 行是问题所在。
我有以下代码:
protected void Page_Load(object sender, EventArgs e)
{
string query = GetQuery();
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand(query, conn);
SqlDataReader reader = cmd.ExecuteReader();
FillTable(reader);
conn.Close();
}
private string GetQuery()
{
string query = string.Empty;
if (!string.IsNullOrEmpty(TextBox1.Text))
{
// DateTime start;
// DateTime.TryParse(TextBox1.Text, out start);
query = string.Format("SELECT p.nume, n.data_inceput,n.data_sfarsit,n.pret,n.id FROM hotel p ,rezervare n where p.ID = n.id_hotel and (CONVERT(nvarchar(10), n.data_inceput, 101) LIKE '%{0}%'", TextBox1.Text);
}
else
{
query = string.Format("SELECT p.nume, n.data_inceput,n.data_sfarsit,n.pret,n.id FROM hotel p ,rezervare n where p.ID = n.id_hotel");
}
return query;
}
可能有什么问题?我真的不知道去哪里看
您错过了 sql 语句末尾的右括号。
这
(CONVERT(nvarchar(10), n.data_inceput, 101) LIKE '%{0}%'
应该改为这个:
(CONVERT(nvarchar(10), n.data_inceput, 101) LIKE '%{0}%)'
你最好你 ISO 日期:yyyyMMdd。
因此,在代码隐藏中:
private string GetQuery()
{
string query = string.Empty;
if (!string.IsNullOrEmpty(TextBox1.Text))
{
DateTime dt = DateTime.MinValue;
DateTime.TryParse(TextBox1.Text, out dt);
query = string.Format("SELECT p.nume, n.data_inceput,n.data_sfarsit,n.pret,n.id FROM hotel p ,rezervare n where p.ID = n.id_hotel and n.data_inceput > '{0}' AND n.data_inceput < '{1}'", dt.AddDays(-1).ToString("yyyyMMdd"), dt.AddDays(1).ToString("yyyyMMdd"));
}
else
{
query = string.Format("SELECT p.nume, n.data_inceput,n.data_sfarsit,n.pret,n.id FROM hotel p ,rezervare n where p.ID = n.id_hotel");
}
return query;
}