【问题标题】:C# `INSERT INTO` MS Access db not insertingC#`INSERT INTO` MS Access db未插入
【发布时间】:2013-03-04 15:03:23
【问题描述】:

所以我正在开发一个数据库程序,它需要使用 INSERT INTO 命令将日志插入数据库,但是执行查询后表仍然为空。请帮忙!谢谢~这是代码。

    //Predefined connection string
    OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\xxx\Desktop\data.mdb;Jet OLEDB:Database Password=xxx;");




    private void Login_Load(object sender, EventArgs e)
    {
        Log("StartUp", "System", "NULL", "System StartUp");
    }

    public void Log(string Type, string User, string Table_affected, string Remarks)
    {

        string NowDateStamp = string.Format("{0}/{1}/{2}", 
                              DateTime.Now.Day.ToString(), 
                              DateTime.Now.Month.ToString(), 
                              DateTime.Now.Year.ToString());
        string NowTimeStamp = string.Format("{0}:{1}:{2}",
                              DateTime.Now.Hour.ToString(),
                              DateTime.Now.Minute.ToString(),
                              DateTime.Now.Second.ToString());
        string tempSQL = string.Format("INSERT INTO 'Log' VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}')",
                                        NowDateStamp,
                                        NowTimeStamp,
                                        Type,
                                        User,
                                        Table_affected,
                                        Remarks);
        vcon.Open();
        OleDbCommand vcom = new OleDbCommand(tempSQL, vcon);
        vcom.ExecuteNonQuery();
        MessageBox.Show("Done"); // <-- This MessageBox isn't even showing.
        vcon.Close();
    }

所以基本上程序会启动然后记录时间,但是它似乎对数据库没有做任何事情,任何人都可以帮助我吗?谢谢!

【问题讨论】:

  • 您是否看到任何运行时错误?您还必须使用 Access - SQLServer CE4.0 是一个很好的选择吗?
  • 在调试模式下运行,猜测那里有错误,否则你会得到消息框,正如你所指出的。
  • 对于您的时间戳,您可以只使用var nowDateStamp = DateTime.Now.ToString("dd/MM/yyyy");var nowTimeStamp = DateTime.Now.ToString("HH:mm:ss");,这与您的问题无关,但可能会使您的代码更具可读性 =)
  • 您的 INSERT INTO 命令容易受到sql injection 攻击。你应该总是use parameters with QleDbCommand 而不是用值格式化字符串。
  • 为丹科+1。永远不要在所有查询字符串中使用格式化字符串。

标签: c# .net ms-access oledb


【解决方案1】:

执行查询会导致异常,但在某个地方会捕获并忽略该异常。

您在表名应该在的位置使用字符串文字。它应该只是标识符:

INSERT INTO Log VALUES ...

或方括号内的标识符:

INSERT INTO [Log] VALUES ...

【讨论】:

  • +1 - 但是,我建议始终使用方括号。无论如何,您都需要保留字和带有空格的列名,所以我总是会这样做以保持一致性
【解决方案2】:

替换这个:

INSERT INTO 'Log' VALUES 

有了这个:

INSERT INTO Log VALUES 

【讨论】:

  • 对不起,我发现查询本身没问题,但是由于表有自己的主键,因此插入到表中的项目将是 7 个而不是 6 个。因此我已经删除了主键,现在一切都很好=]感谢您的帮助! =]
【解决方案3】:

除了其他人所说的之外,我猜你也有语法错误。您应该指定要将值插入到哪些列中。

INSERT INTO Log (<column1>,<column2>,...)
VALUES (<Value to insert into column1>, <Value to insert into column 2>,...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多