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

コメントで述べたように、これはファイルのアクセス許可の問題です。

通常、このエラーは、データベース内の情報を変更する UPDATE またはその他のアクションを実行しようとしたときに発生します。

このエラーは、書き込み/変更権限が不十分なため、ADO.NET が Microsoft Access データベースに書き込むことができないデータオブジェクトが原因で発生します。これは、IUSR_ および IWAM_ に読み取り/書き込みを許可することで簡単に修正できます。

IUSR_<machineName>匿名のIWAM_<machineName>Web ユーザーが Microsoft Access データベースを変更する必要がある場合に注目され、その間、Jet はデータベースのロックを処理するために .ldb ファイルを作成します。上記の 2 人のユーザーが必要な権限を持っていない場合、ロック ファイルは作成されず、最終的に Microsoft Access データベースは変更できません。

修理:

この問題を解決するには、Microsoft Access データベースを保持するフォルダーを右クリックし、プロパティを選択します。エクスプローラーの [セキュリティ] タブを使用して、このフォルダーのプロパティを調整し、インターネット ゲスト アカウントが適切な書き込みアクセス許可を持つようにします。

また、MDB ファイル自体が読み取り専用としてマークされていないこと、および MDB ファイルが開かれていないことも確認してください。特に排他モードで。ASP から Microsoft Access データベースにアクセスしようとしているときに

ソース: http://forums.asp.net/t/154273.aspx/9/10

于 2013-08-30T05:11:18.267 に答える
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 に答える