【问题标题】:record not inserting into access database记录未插入访问数据库
【发布时间】:2012-09-27 15:53:54
【问题描述】:

我有一个 C# windows 应用程序,我正在尝试将数据(已由用户输入)插入到 access 数据库中。我没有收到任何错误,但它没有输入数据。有什么想法吗?

        string sqlInsert = "insert into assessment (id) values (@id)";

        using (OleDbConnection conn = new OleDbConnection(dsn))
        {

            OleDbCommand cmd = new OleDbCommand(sqlInsert, conn);

            cmd.Parameters.Add("@id", OleDbType.VarChar, 50).Value = iDTextBox.Text.Trim().Length != null ? storedID.Trim() : "";

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }

id 的数据类型是Text

编辑: 连接字符串存储在 app.config 中:

<add name="conn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\CADSCUPP.mdb" providerName="System.Data.OleDb"/>

并通过以下方式在代码中访问:

private string dsn = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

如果我手动插入记录(而不是通过代码后面的代码),我可以在程序的其他地方读取记录,以便连接正常工作。

【问题讨论】:

  • OleDbType.VarChar?身份证不是数字吗?
  • 你怎么知道记录没有被写入?您是从 ASP.NET 查询数据库,还是查看 Access 中的表来验证它?您可能会检查 ASP.NET 和 VS 是否没有在您的开发机器上的其他地方复制数据库。我不知道 ASP.NET 会发生这种情况,但我已经看到 Win7 上使用 Access dbs 的 WinForms 应用程序会发生这种情况。
  • 出于好奇,该查询在 MS Access 中是否按预期工作?
  • @AnnL。幸运的是,没有生成副本。我知道它是从 .net 和 access 写的
  • @Remou 是的,查询在访问中按预期工作

标签: c# asp.net ms-access


【解决方案1】:

众所周知,Windows 7 在编译和运行 WinForms 应用程序时会在其他地方复制 Access 数据库。我不知道它对 ASP.NET 应用程序执行此操作,但这是可能的。验证应用程序正在访问的数据库是否位于您认为的位置可能是值得的。

【讨论】:

  • 在调试中发现了几个文件夹,它正在重新创建数据库并将其保存在那里
  • 是的,它将它复制到可执行文件所在的 bin 文件夹中。并且在每次构建时,它都会用解决方案文件夹中的副本替换它。因此,如果您不构建和执行您的 exe 文件,您可以看到您的数据。
【解决方案2】:

在 Sql Text 中使用问号而不是 @。参数名称与访问无关。只有订单才算。我已经有一段时间没有使用访问权限了——但这是我记得的一件事,它曾经让我发疯。使用 Access,参数名称无关紧要。

string sqlInsert = "insert into assessment (id) values (?)";

        using (OleDbConnection conn = new OleDbConnection(dsn))
        {

            OleDbCommand cmd = new OleDbCommand(sqlInsert, conn);

            cmd.Parameters.Add("?", OleDbType.VarChar, 50).Value = iDTextBox.Text.Trim().Length == 0 ? storedID.Trim() : "";

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }

【讨论】:

  • @peroija - 查看我的更新 - 表格评估是什么样的?
【解决方案3】:

您可以验证您的字符串连接是否正确

示例:

connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=yourdatabasename.mdb;"

【讨论】:

    【解决方案4】:

    我在您的连接字符串中没有看到任何身份验证。试试以下字符串之一:

    http://www.connectionstrings.com/access-2007

    【讨论】:

      【解决方案5】:

      我认为您没有提及命令类型。添加另一行,如下所示:

      OleDbCommand cmd = new OleDbCommand(sqlInsert, conn);
      cmd.CommandType = CommandType.Text; 
      

      【讨论】:

        猜你喜欢
        • 2018-12-27
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-19
        相关资源
        最近更新 更多