C#System.Data.OleDb;语法错误插入到
我正试图将数据从C#发送到MS Access的数据库。当我试图执行我的查询时,我得到一个错误 INSERT INTO语句中的语法错误 我的代码看起来像这样;奇怪的是,当我尝试在没有C#System.Data.OleDb;语法错误插入到,c#,database,ms-access,C#,Database,Ms Access,我正试图将数据从C#发送到MS Access的数据库。当我试图执行我的查询时,我得到一个错误 INSERT INTO语句中的语法错误 我的代码看起来像这样;奇怪的是,当我尝试在没有DateTime的情况下执行查询时,它可以工作: string queryString = "insert into Data(Temp,Hum,Time)Values('" + data[0] + "','" + data[1] + "','" + Date
DateTime
的情况下执行查询时,它可以工作:
string queryString = "insert into Data(Temp,Hum,Time)Values('" + data[0] + "','" + data[1] + "','" + DateTime.Now + "')";
using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/Users/Brecht/OneDrive/Bureaublad/test.accdb"))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
// always call Close when done reading.
reader.Close();
}
如果你们中的一些人需要更多信息,请告诉我。:) 日期值需要格式正确的字符串表达式:
string queryString = "insert into Data (Temp,Hum,Time) Values ('" + data[0] + "','" + data[1] + "',#" + DateTime.Now.ToString("yyyy'/'MM'/'dd hh':'mm':'ss") + "#)";
除此之外,您不应该以这种方式组合SQL查询(google“SQL注入漏洞”),问题在于.NET格式化日期的方式与SQL server期望的方式不一致。您需要手动将日期格式化为有效的SQL日期值。|。还有:
Temp、Hum、Time
都是字符串吗?有什么价值观?特别是:这里使用字符串连接,使用的是DateTime.Now.ToString()
。-因此,如果字段不是字符串,它可能会崩溃,对吗?根本不需要格式化DateTime
——SQL Server和Access(以及大多数其他数据库)都会完美地处理NETDateTime
对象。始终使用SQL参数。@OlivierRogier Temp和Hum是字符串。时间是一个日期/时间。temp和hum的值来自将数据插入Access的udp连接(工作正常)?尝试从DateTime中删除撇号分隔符。现在或替换为#分隔符。或者使用参数不要预兆坏代码,使其稍微不那么坏,这需要parameterization@Charlieface:直截了当的问题应该得到直截了当的回答。然后你可以带上你的替代方案——你没有。