在Access数据库中存储值
本文关键字:存储 数据库 Access | 更新日期: 2023-09-27 18:06:23
我基本上想在数据库中存储一些值。
我一直得到错误"Number of query values and destination fields are not the same."
指向dr = cmd.ExecuteReader();
有人能帮帮我吗?:)
我对整件事有点陌生,真的不知道发生了什么。
下面是我使用的代码。
public partial class Registeration_experiment : System.Web.UI.Page
{
static OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:'New folder'Project 1.0'WebSite1'New Microsoft Office Access 2007 Database.accdb");
OleDbDataAdapter ada = new OleDbDataAdapter();
OleDbCommand cmd = new OleDbCommand();
OleDbDataReader dr;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string str = "insert into Registeration_Test (Name1, address, emailaddress)" +
"values (?, ?, ?)";
con.Open();
cmd = new OleDbCommand(str, con);
cmd.Parameters.AddWithValue("@p1", TextBox1.Text);
cmd.Parameters.AddWithValue("@p2", TextBox2.Text);
cmd.Parameters.AddWithValue("@p4", TextBox4.Text);
cmd.ExecuteNonQuery();
}
}
谢谢你
您正在写入数据库,而不是从数据库中读取。
使用ExecuteReader没有意义,你需要一个ExecuteNonQuery来处理
编辑现在看看表的结构。它由5个字段组成。
在这种情况下,您有两种选择。在插入语句中提供要更新的字段的名称,或为每个字段添加参数
第一种选择,您不提供字段的名称(为每个字段传递一个参数,除了ID,因为我认为它是一个自动增量字段,这意味着数据库管理自己的值字段)
// No name provided for fields, need to pass a parameter for each field
string str = "insert into Registeration_Test values (?, ?, ?, ?)";
con.Open();
cmd = new OleDbCommand(str, con);
cmd.Parameters.AddWithValue("@p1", Textbox1.Text);
cmd.Parameters.AddWithValue("@p2", Textbox2.Text);
cmd.Parameters.AddWithValue("@p3", Textbox3.Text);
cmd.Parameters.AddWithValue("@p4", Textbox4.Text);
cmd.ExecuteNonQuery();
(注意,TextBox1…等等是你在上面的例子中提供的名称,我不知道这些文本框的确切内容,用户输入数据插入数据库,也不知道它们是否真的存在于你的页面/表单中)
第二种选择,声明应该在数据库
中更新的字段// Just three named fields updated
string str = "insert into Registeration_Test (Name1, address, emailaddress)" +
"values (?, ?, ?)";
con.Open();
cmd = new OleDbCommand(str, con);
cmd.Parameters.AddWithValue("@p1", Textbox1.Text);
cmd.Parameters.AddWithValue("@p2", Textbox2.Text);
cmd.Parameters.AddWithValue("@p4", Textbox4.Text);
cmd.ExecuteNonQuery();
还请注意,我已经改变了你的sql命令不使用字符串连接。
这是一种非常糟糕的做法,会导致许多问题。最糟糕的是Sql注入,更不用说当文本包含单引号或其他有问题的字符
参数占位符由命令文本中的?
表示(在OleDb中)。这个占位符将被OleDbCommand参数集合中添加的实际值所替换(按照占位符出现的确切顺序)。使用参数(参数化查询)允许框架检查传递的值,并在这些值无效时采取适当的操作。
编辑连接的问题是由于前面的命令使连接保持打开状态引起的。这是另一种不好的做法。每个连接都应该:创建、打开、使用、关闭。下面的伪代码是
// Create the connection
using(OleDbConnection con = GetOleDbConnection())
{
con.Open();
... // use the connection with insert/delete/update/select commands
}
// Exiting from the using block close and destroy (dispose) the connection