2

我正在读取Registry key值并将它们存储在中string variables,并将这些值作为参数传递到NewReg方法中以将它们存储到数据库中,但是我收到此错误消息you must use an updateable query,因此收到此消息user not added in database

我哪里错了?我怎样才能做到这一点?

public partial class LoginForm : Form
{
    DBHandling db = new DBHandling();

    public LoginForm()
    {
        try
        {
            RegistryKey key = Registry.ClassesRoot;
            RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software\StudentExm");

            string usrname = registryKey.GetValue("UserName").ToString();
            string password = registryKey.GetValue("Password").ToString();
            string emailId = registryKey.GetValue("EmailID").ToString();
            string contctno = registryKey.GetValue("ContactNo").ToString();
            string regDate = registryKey.GetValue("RegDate").ToString();
            registryKey.Close();

            if (NewReg(usrname, password, emailId, contctno, regDate))
            {
                MessageBox.Show("User Name: " + usrname + "\n" +
                    "Password: " + password + "\n" +
                    "Email ID: " + emailId + "\n" +
                    "Contact No: " + contctno + "\n" +
                    "Reg Date: " + regDate);
            }
            else
            {
                MessageBox.Show("User not added in the database.");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }
}

DBHandling 类中的 NewReg 方法

public bool NewReg(string usrName, string passwrd, string emailID, string contactNo,string regdat)
{
    bool flag = false;

    try
    {
        //string sql = "INSERT INTO test(nametest,pass,email,contact,regdate) Values('" + usrName + "','" + passwrd + "','" + emailID + "','" + contactNo + "','" + System.DateTime.Now + "')";
        string sql = "INSERT INTO UserInfo([UserName],[Password],[email],[contact],[regdate]) Values(@UserInfo,@Password,@email,@contact,@regdate)";

        cmd = new OleDbCommand(sql, acccon);
        cmd.Parameters.AddRange(new[] {
            new OleDbParameter("@UserName", usrName),
            new OleDbParameter("@Password", passwrd),
            new OleDbParameter("@EmailID", emailID),
            new OleDbParameter("@ContactNo", contactNo),
            new OleDbParameter("@RegDate", regdat)
        });

        cmd.ExecuteNonQuery();
        flag = true;
    }
    catch (Exception err)
    {
        MessageBox.Show(err.Message.ToString());
    }

    return flag;
}

提前感谢您的帮助

4

3 回答 3

0

像这样试试 在此处输入图像描述

 string keyName = @"HKEY_CURRENT_USER\...\Node[Name]";
        string valueName = "Value"; // Value in registry Ex. RegDate
        object Obj = Registry.GetValue(keyName, valueName, "Exist");
        if (Obj == null)
        {

        }
        else
        {
            Do your Code .... 
        }
于 2013-08-30T12:47:18.883 回答
0

我猜是因为这条线的问题:

string usrname = registryKey.GetValue("UserName") + Environment.NewLine;

代码 U 可以像这样更改并尝试。

 string usrname = registryKey.GetValue("UserName").ToString();

就像您使用 分配值一样+ Environment.NewLine;。不应该。,

这就是you must use an updateable query错误消息的原因。

这是您的自定义消息user not added in database。由于 Condition Fails 它的显示。

希望能帮助到你。, :)

于 2013-08-30T06:33:51.767 回答
0

正如我在评论中所说,这是一个文件权限问题。

当您尝试执行 UPDATE 或其他更改数据库中信息的操作时,通常会发生此错误。

发生此错误是因为数据对象 ado 或 ADO.NET由于写入/修改权限不足而无法写入 Microsoft Access 数据库,这可以通过授予 IUSR_ 和 IWAM_ 读取/写入权限来轻松修复。

IUSR_<machineName>IWAM_<machineName>在匿名 Web 用户需要修改 Microsoft Access 数据库时成为焦点,同时 Jet 创建一个 .ldb 文件来处理数据库锁定。如果上述 2 个用户没有必要的权限,则不会创建锁定文件,最终无法修改 Microsoft Access 数据库。

使固定:

要解决此问题,请右键单击包含 Microsoft Access 数据库的文件夹并选择属性。使用资源管理器中的安全选项卡调整此文件夹的属性,以便 Internet 访客帐户具有正确的可写权限。

还要确保 MDB 文件本身没有被标记为只读,并且您没有打开 MDB 文件;特别是在独占模式下;在尝试从 ASP 访问 Microsoft Access 数据库时

来源: http ://forums.asp.net/t/154273.aspx/9/10

于 2013-08-30T05:11:18.267 回答