首页
学习
活动
专区
圈层
工具
发布

OleDb异常
EN

Stack Overflow用户
提问于 2016-07-21 16:01:31
回答 2查看 728关注 0票数 2

经过5个小时的搜寻,我找不到我的错误。我明白这个例外。怎么啦?

System.Data.OleDb.OleDbException类型的未处理异常发生在MyDictionary.exe中 附加信息: INSERT INTO语句中的语法错误。

我的代码:

代码语言:javascript
复制
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();
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-21 16:29:10

您应该在插入statement.Also中使用参数,看起来像是缺少了command.Connection = connection;。请注意,您的SQL易于使用SQL注入

代码语言:javascript
复制
command.CommandText ="INSERT INTO "+language+"([Native],[Foreign],[Definition],[AddingDate]) VALUES (@Native,@Foreign,@Definition,@AddingDate)";

command.Parameters.AddWithValue("@Native", word.Native);
command.Parameters.AddWithValue("@Foreign",word.Foreign);
command.Parameters.AddWithValue("@Definition",word.Definition);
command.Parameters.AddWithValue("@AddingDate",word.AddingDate);

command.CommandType = System.Data.CommandType.Text;
command.Connection = connection;
connection.Open();

command.ExecuteNonQuery();
票数 1
EN

Stack Overflow用户

发布于 2016-07-21 16:38:52

在OleDb中,INSERT INTO语句的正确语法涉及SELECT子句的使用,即使您是在追加静态值。因此,您需要像下面的示例一样更改查询。

此外,如果不实际处理引发的异常,则不要构造try...catch..finally。为了便于处理,使用using() { }块代替。所以这里是:

代码语言:javascript
复制
public void Insert(Word word)
{
    string language=FindLanguage();

    using (var connection = new OleDbConnection("connection string goes here"))
    using (var command = new OleDbCommand...)
    {
        command.CommandText = @
            "INSERT INTO " + language + "(Native, Foreign, Definition, AddingDate)" +
            "SELECT '"
                + word.Native + "' AS Native, '" 
                + word.Foreign + "' AS Foreign, '" 
                + word.Definition + "' AS Definition, '"
                + word.AddingDate + "' AS AddingDate"
        ;

        connection.Open();

        command.ExecuteNonQuery();

        connection.Close();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38509044

复制
相关文章

相似问题

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