【发布时间】:2016-07-21 16:01:31
【问题描述】:
搜索了 5 个小时,我找不到我的错误。我得到了这个例外。怎么了?
MyDictionary.exe 中出现“System.Data.OleDb.OleDbException”类型的未处理异常
附加信息:INSERT INTO 语句中的语法错误。
我的代码:
public void Insert(Word word)
{
string language=FindLanguage();
try
{
command.CommandText ="INSERT INTO "+language+" ( Native , Foreign , Definition , AddingDate) values ( '" + word.Native + "' , '" + word.Foreign + "' , '" + word.Definition + "' ,'" + word.AddingDate + "')";
command.CommandType = System.Data.CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
}
catch (Exception)
{
throw;
}
finally
{
if (connection != null)
{
connection.Close();
}
}
}
【问题讨论】:
-
异常中是否有更多信息,或任何内部异常?生成的 SQL 语句是什么样的?如果从 Access IDE 执行,它可以工作吗?
-
使用参数避免sql注入和格式化错误。另外,请尝试在语言变量周围加上括号:
[" + language + "],以防其中有空格或冲突字符。 -
把字符串组合成一个变量,这样就可以调试输出命令字符串了……然后把它赋值给CommandText。我敢打赌,您的组合语句中出现了某种意想不到的语法。
-
特别是,如果您的任何条款中有单引号,这将导致语法无效。您的定义列将是发生这种情况的候选者。如上所述,参数使这个问题消失。
-
@LarsTech 没有任何改变,我得到同样的异常
标签: c# ms-access oledb oledbexception