2

ユーザー名、日付、共有パスなどのデータを含む mysql データベースがあります。

アプリは、有効期限のある特定のユーザーに共有パスに読み取り/書き込み許可を与えることができ、そのすべてのデータが mysql に挿入されます。

各ループですべての行を読み取り、exp date = today の行が見つかった場合は、ユーザーを取得してパスを共有し、許可を削除します。

try
{
    string MyConString =
        "SERVER=localhost;" +
        "DATABASE=permdata;" +
        "UID=user;" +
        "PASSWORD=pass;";

    string sql = "SELECT expDate, user, sfolder FROM  permuser";

    MySqlConnection connection = new MySqlConnection(MyConString);
    MySqlCommand cmdSel = new MySqlCommand(sql, connection);
    MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
    MySqlDataReader dr = cmdSel.ExecuteReader();

    while  (dr.Read())
    {
        foreach ( *row that exp. date = today)
        {
            *get user and share path
            *myDirectorySecurity.RemoveAccessRule (user/share path)
        }
    }

    connection.Close();
    connection.Dispose();
}

catch (MySqlException ex)
{
    MessageBox.Show(ex.Message);
    Close();
}

どんなアイデアでもいいです、ありがとう

私はこれをやってしまう、マイケルに感謝..1

try
        {
string MyConString =
    "SERVER=localhost;" +
    "DATABASE=permdata;" +
    "UID=user;" +
    "PASSWORD=pass;";

DataSet dataSet = new DataSet(); 
string sql = "SELECT key, fdate, user, perm, sfolder FROM  permuser WHERE fdate=CURDATE()";

MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand cmdSel = new MySqlCommand(sql, connection);
new MySqlDataAdapter(cmdSel).Fill(dataSet, "permuser");


foreach (DataRow row in dataSet.Tables["permuser"].Rows)
    {
         string fuser = row["user"].ToString();
         string pathtxt = row["sfolder"].ToString();

        DirectoryInfo myDirectoryInfo = new DirectoryInfo(pathtxt);
        DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
        string User = System.Environment.UserDomainName + "\\" + fuser;


                myDirectorySecurity.RemoveAccessRule(new FileSystemAccessRule(User, FileSystemRights.Write | FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
     PropagationFlags.None, AccessControlType.Allow));

                myDirectoryInfo.SetAccessControl(myDirectorySecurity);
    }

connection.Close();
connection.Dispose();
}


catch (MySqlException ex)
{
    Console.WriteLine(ex.Message);
   Environment.Exit(0);
}
4

1 に答える 1

2

このような特定の行をフェッチするようにクエリを書き直してください

"SELECT expDate, user, sfolder FROM  permuser WHERE expDate=GetDate()";

私はあなたのコードを取得し、以下に再調整しました。

try
{
    string MyConString =
        "SERVER=localhost;" +
        "DATABASE=permdata;" +
        "UID=user;" +
        "PASSWORD=pass;";

    DataSet dataSet = new DataSet(); // Set a new DataSet instance
    string sql = "SELECT expDate, user, sfolder FROM  permuser WHERE expDate=GetDate()"

    MySqlConnection connection = new MySqlConnection(MyConString);
    MySqlCommand cmdSel = new MySqlCommand(sql, connection);
    new SqlDataAdapter(cmdSel).Fill(dataSet, "permuser"); // passing the command into the DataAdapter


    foreach (DataRow row in dataSet.Tables["permuser"].Rows)
        {
            //*get user and share path
            row["user"]; //User rows
             row["sfolder"]; //sfolder rows
            *myDirectorySecurity.RemoveAccessRule (user/share path)
        }

    connection.Close();
    connection.Dispose();
}

catch (MySqlException ex)
{
    MessageBox.Show(ex.Message);
    Close();
}

上記のコードをよく見ると、私が DataSet を使用し、SqlReader を削除したことがわかります。これは、DataSet がはるかに簡単で安全であることがわかったからです。

于 2012-09-18T13:40:50.213 に答える