2

我有一个 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;

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

4

5 回答 5

2

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

于 2012-10-02T15:53:17.193 回答
1

在 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();
        }
于 2012-09-27T19:01:49.710 回答
0

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

样本 :

connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=yourdatabasename.mdb;"
于 2012-09-27T16:08:08.077 回答
0

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

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

于 2012-09-27T21:48:32.423 回答
0

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

OleDbCommand cmd = new OleDbCommand(sqlInsert, conn);
cmd.CommandType = CommandType.Text; 
于 2013-12-26T18:48:56.490 回答