我正在为我的程序开发用户名/密码创建系统。它只是在计算机实验室中使用,而我将只有一个中央Access数据库,它通过实验室机器上的脚本进行分发。或者那就是现在的计划。我记不起将信息插入数据库以保存我的生活的正确代码。这是我到目前为止所得到的。散列和腌制似乎很顺利,我只是无法将其推入数据库。表的名称是规范的。
我收到“查询字段数和目标字段不一样”。
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=access.mdb";
conn.Open();
string Name = txtName.Text;
string PW = txtHash.Text;
string Salt = txtSalt.Text;
OleDbCommand cmmd = new OleDbCommand("INSERT INTO regulate(regulate) Values(@NAME, @PASSWORD, @SALT)", conn);
if (conn.State == ConnectionState.Open)
{
cmmd.Parameters.Add("@NAME", OleDbType.VarWChar, 100).Value = Name;
cmmd.Parameters.Add("@PASSWORD", OleDbType.VarWChar, 500).Value = PW;
cmmd.Parameters.Add("@SALT", OleDbType.VarWChar, 10).Value = Salt;
try
{
cmmd.ExecuteNonQuery();
MessageBox.Show("DATA ADDED");
conn.Close();
}
catch (OleDbException expe)
{
MessageBox.Show(expe.Message);
conn.Close();
答案 0 :(得分:2)
此字段和类型的数量:
INSERT INTO regulate(regulate)
必须与此匹配:
Values(var1, var2, var3)
应该是这样的:
INSERT INTO regulate(name, password, salt) Values(?, ?, ?)
假设这些是列名。
PS:我不经常使用OleDb,但我认为你需要?
而不是@p.s.w.g的答案命名为@arg
。 (如果这有帮助,请提出他/她的答案)。我可以确认我的所有OleDb代码确实只使用位置参数。
答案 1 :(得分:2)
OleDbCommand
使用的参数格式与SqlCommand
不同,如文档中所示:
当
OleDbCommand
设置为CommandType
时,OLE DB .NET提供程序不支持将参数传递给SQL语句或Text
调用的存储过程的命名参数。在这种情况下,必须使用问号(?
)占位符。
正如@codenheim所示,请检查INSERT
命令的语法。
此外,PASSWORD
是Jet SQL中的reserved word,因此您可能需要引用该列名称。我相信这些引用样式都可行:
INSERT INTO regulate(name, `password`, salt) Values(?, ?, ?)
INSERT INTO regulate(name, [password], salt) Values(?, ?, ?)
答案 2 :(得分:1)
首先要确保您的access.mdb
路径正确无误
然后还要确保如果您为insert语句(在您的情况下为@NAME
,@PASSWORD
,@SALT
)提供3个参数,那么您还必须为这些参数提供匹配的列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();
}