如何通过C#将信息输入Access数据库?
我正在为我的程序开发用户名/密码创建系统。它将用于计算机实验室,我将拥有一个中央Access数据库,通过实验室机器上的脚本分发。或者这就是现在的计划。不过,我记不起将信息插入数据库以拯救生命的正确代码了。这就是我到目前为止得到的。散列和盐析似乎进行得很顺利,我只是无法将其放入数据库。该表的名称为regulate 我得到的是“查询字段和目标字段的数量不一样”如何通过C#将信息输入Access数据库?,c#,database,visual-studio,oledb,C#,Database,Visual Studio,Oledb,我正在为我的程序开发用户名/密码创建系统。它将用于计算机实验室,我将拥有一个中央Access数据库,通过实验室机器上的脚本分发。或者这就是现在的计划。不过,我记不起将信息插入数据库以拯救生命的正确代码了。这就是我到目前为止得到的。散列和盐析似乎进行得很顺利,我只是无法将其放入数据库。该表的名称为regulate 我得到的是“查询字段和目标字段的数量不一样” 此字段中的字段和类型数: INSERT INTO regulate(regulate) 必须与此匹配: Values(var1, var2
此字段中的字段和类型数:
INSERT INTO regulate(regulate)
必须与此匹配:
Values(var1, var2, var3)
应该是这样的:
INSERT INTO regulate(name, password, salt) Values(?, ?, ?)
假设这些是列名
PS:我不经常使用OleDb,但我相信您需要
?
而不是按照@p.s.w.g的答案命名@arg
。(如果有帮助,请向上投票)。我可以确认我的所有OleDb代码确实只使用了位置参数。其中的字段和类型数量:
INSERT INTO regulate(regulate)
必须与此匹配:
Values(var1, var2, var3)
应该是这样的:
INSERT INTO regulate(name, password, salt) Values(?, ?, ?)
假设这些是列名
PS:我不经常使用OleDb,但我相信您需要?
而不是按照@p.s.w.g的答案命名@arg
。(如果有帮助,请向上投票)。我可以确认我的所有OleDb代码确实只使用了位置参数。使用了与SqlCommand
不同的参数格式,如文档中所示:
当CommandType
设置为Text
时,OLE DB.NET提供程序不支持将参数传递给SQL语句或由OleDbCommand
调用的存储过程的命名参数。在这种情况下,必须使用问号(?
)占位符
按照建议,检查INSERT
命令的语法
另外,PASSWORD
是Jet SQL中的一个名称,因此您可能需要引用该列名。我相信这两种报价方式中的任何一种都会奏效:
INSERT INTO regulate(name, `password`, salt) Values(?, ?, ?)
使用与SqlCommand
不同的参数格式,如文档中所示:
当CommandType
设置为Text
时,OLE DB.NET提供程序不支持将参数传递给SQL语句或由OleDbCommand
调用的存储过程的命名参数。在这种情况下,必须使用问号(?
)占位符
按照建议,检查INSERT
命令的语法
另外,PASSWORD
是Jet SQL中的一个名称,因此您可能需要引用该列名。我相信这两种报价方式中的任何一种都会奏效:
INSERT INTO regulate(name, `password`, salt) Values(?, ?, ?)
第一件重要的事情是确保访问.mdb的路径正确。
然后还要确保,如果您向insert语句提供了3个参数(在您的情况下,
@NAME
,@PASSWORD
,@SALT
),则还必须为这3个参数分配一个匹配的列
string cs = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=access.mdb";
OleDbConnection c = new OleDbConnection(cs);
string Name = txtName.Text;
string PW = txtHash.Text;
string Salt = txtSalt.Text;
try
{
c.Open();
string s = "INSERT INTO regulate(NAME, PASSWORD, SALT) Values (@NAME, @PASSWORD, @SALT)";
using (OleDbCommand cmd = new OleDbCommand(s, c))
{
cmd.Parameters.AddWithValue("@NAME", Name);
cmd.Parameters.AddWithValue("@PASSWORD", PW);
cmd.Parameters.AddWithValue("@SALT", Salt);
cmd.ExecuteNonQuery();
MessageBox.Show("DATA ADDED");
}
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
c.Close();
}
第一件重要的事情是确保访问.mdb的路径正确。
然后还要确保,如果您向insert语句提供了3个参数(在您的情况下,
@NAME
,@PASSWORD
,@SALT
),则还必须为这3个参数分配一个匹配的列
string cs = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=access.mdb";
OleDbConnection c = new OleDbConnection(cs);
string Name = txtName.Text;
string PW = txtHash.Text;
string Salt = txtSalt.Text;
try
{
c.Open();
string s = "INSERT INTO regulate(NAME, PASSWORD, SALT) Values (@NAME, @PASSWORD, @SALT)";
using (OleDbCommand cmd = new OleDbCommand(s, c))
{
cmd.Parameters.AddWithValue("@NAME", Name);
cmd.Parameters.AddWithValue("@PASSWORD", PW);
cmd.Parameters.AddWithValue("@SALT", Salt);
cmd.ExecuteNonQuery();
MessageBox.Show("DATA ADDED");
}
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
c.Close();
}
+1用于位置参数建议。我通常使用特定于db的ADO提供程序或Devart dotConnect,因此我没有意识到这一限制。@codenheim+1也很好地捕捉到了语法错误。我认为,一旦OP修复了参数,他将不得不处理下一件事。我在
OleDbCommand cmmd=new OleDbCommand(“INSERT-INTO-regulate(NAME,PASSWORD,SALT)”+“VALUES(?,,?)”,conn)代码>并在此时获取“插入到命令中的语法错误”。我从与您所说的相同引号中的值开始,得到了相同的错误,只是尝试了不同的语法,但未能通过错误。@AarronDixonPASSWORD
是Access中的保留字。请看我的最新答案。我也很确定我的名字。奇怪的是,在你弄明白一些事情之后,它看起来是如此明显。位置参数建议+1。我通常使用特定于db的ADO提供程序或Devart dotConnect,因此我没有意识到这一限制。@codenheim+1也很好地捕捉到了语法错误。我认为,一旦OP修复了参数,他将不得不处理下一件事。我在OleDbCommand cmmd=new OleDbCommand(“INSERT-INTO-regulate(NAME,PASSWORD,SALT)”+“VALUES(?,,?)”,conn)代码>并在此时获取“插入到命令中的语法错误”。我从与您所说的相同引号中的值开始,得到了相同的错误,只是尝试了不同的语法,但未能通过错误。@AarronDixonPASSWORD
是Access中的保留字。请看我的最新答案。我也很确定我的名字。奇怪的是,在你弄明白一些事情之后,它看起来是如此明显。“OleDbCommand cmmd=新的OleDbCommand(“插入调节(名称、密码、SALT)值(?,?)”,康涅狄格州)但现在它给了我INSERT INTO语句NO中的语法错误。它全部进入一个记录,因此习惯上每个记录插入一次。'OleDbCommand cmmd=新的OleDbCommand(“插入调节(名称、密码、SALT)值(?,?)”,conn);'但现在它给了我INSERT INTO语句NO中的语法错误。它全部进入一条记录,因此习惯上每个记录插入一次。获得与其他尝试完全相同的“insert into语句中的语法错误”。我成功地创建了我的第一个哈希和盐析密码系统,没有问题,然后在将数据插入数据库时遇到了巨大的障碍。总是简单的事情,哈哈。得到完全相同的“语法错误插入到语句”作为其他尝试。我成功地创建了我的第一个哈希和salt密码系统没有问题,