记录未插入到Access数据库中。

3

我有一个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?ID 不是数字吗? - Fionnuala
2
你怎么知道记录没有被写入?你是从ASP.NET查询数据库,还是查看Access表以进行验证?你可以检查一下ASP.NET和VS是否在开发机器上的其他地方复制了数据库。我不知道ASP.NET是否会这样做,但我曾经看到过使用Access数据库的Win7上的WinForms应用程序出现这种情况。 - Ann L.
作为好奇心,那个查询在MS Access中是否按预期工作? - Fionnuala
@AnnL。幸运的是没有生成任何副本。我知道它是从 .net 和 access 编写的。 - peroija
@Remou 是的,在 Access 中,查询按预期工作。 - peroija
显示剩余3条评论
5个回答

2

已知在编译和运行WinForms应用程序时,Windows 7会将Access数据库的副本复制到其他位置。我不确定它是否也会对ASP.NET应用程序进行此操作,但这是有可能的。因此,验证应用程序访问的数据库是否位于预期位置可能很重要。


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

1

在 SQL 文本中使用问号代替 @。在 Access 中,参数名称并不重要,只有顺序才重要。我已经很长时间没有使用 Access 了,但我记得其中一件事情让我非常烦恼,那就是在 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 - 看看我的更新--表格评估是什么样子? - ek_ny

0

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

示例:

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

0

我认为您忘记了提及命令类型。请添加以下一行:

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接