如何通过C#将信息输入Access数据库?

时间:2014-10-26 02:37:20

标签: c# database visual-studio oledb

我正在为我的程序开发用户名/密码创建系统。它只是在计算机实验室中使用,而我将只有一个中央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();

3 个答案:

答案 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();
}