我有一个C#windows应用程序,我正在尝试将数据(已由用户输入)插入到访问数据库中。我没有收到任何错误,但它没有输入数据。有什么想法吗?
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;
如果我手动插入记录(而不是通过代码后面的代码),我可以读取程序中其他地方的记录,以便连接起作用。
答案 0 :(得分:2)
在编译和运行WinForms应用程序时,Windows 7已知在其他地方制作Access数据库的副本。我不知道它是用ASP.NET应用程序做到的,但它有可能。可能值得验证应用程序访问的数据库是否位于您认为的位置。
答案 1 :(得分: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();
}
答案 2 :(得分:0)
您可以验证字符串连接是否正确
示例:
connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=yourdatabasename.mdb;"
答案 3 :(得分:0)
我没有在您的连接字符串中看到任何身份验证。试试其中一个字符串:
答案 4 :(得分:0)
我认为您缺少提及命令类型。添加如下所示的另一行:
OleDbCommand cmd = new OleDbCommand(sqlInsert, conn);
cmd.CommandType = CommandType.Text;