|
Another option to consider is the concept of roles or groups -- assign the rights to rolls or groups and then add individual users to them. This can sometimes ease the burden of administration.
|
|
|
|
|
jrahma wrote: I am asking this because I don't want my application to be slow duri8ng login
If that's all you're after, it won't matter either way (both will be so fast the user will not notice any delay really). That being said, there is a limit to the number of columns you add to a table (something like 1024, and it depends on your version of SQL Server). Also, you have to code for each column and that can create problems. I'd say go with the simpler approach and use a row per setting. You can add an index to the first column (presumably the name of the setting) to make it fast (assuming you are loading the settings separately).
There is then the problem of data types. You could store everything as a string, which would solve that, but then you might have to worry about parsing and such (which is not that big a deal if you ask me). One way to get around that would be to create a table per data type. So, StringSettings, DateSettings, and so on. You could link those tables back to a central table if you like. You could also create a table with a column for the name of the setting, a column for the data type of the setting, and a column for each possible data type (varchar, datetime, etc.). That would waste space, but not too much really, considering you have so few settings. There is also the option of using a single row/column to store some XML that contains all your settings, which would work well if you save/load all your settings at once.
There are quite a few variables to consider when deciding which approach to take. Since speed is not much of an issue, I'd just say take whichever approach seems to be the simplest to you.
|
|
|
|
|
As others have said, design will not impact the apps performance in this area. However I disagree with the column solution as a change of rights requires a data structure change.
There are a vast number of solutions used for this particular problem, let me ad the one we use.
Have a function table which defines either a form or control.
Use user groups
Have a permissions table that joins group and function with a rights field. The rights field contains AEDX for add/edit/delete/execute.
When the user logs on grab a table of the functions and permissions allowed for the user and test the content of the rights field for the specified forms/controls.
A change of user/groups does not require a data/code change. A change of function does. Everything is a compromise.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
hey,
I wrote some Console application (implementation of KNN Algorithm).
It's involve Polymorphism (for different distance calculation), in console everything works great, but the problems began when i tried to add UI to it.
i added a new project (WinForm) and setted it to be a startup Project, then as usual i referenced a console (which become a logic layer) and after i do a rebuild for the whole solution i get an "Error 4 Metadata file ..." compilation error...
I checked in the debug folder of console application, and the ".exe" file was missing.
what is the problem here ?
thanks in advance
|
|
|
|
|
I'm not sure what you are doing, so I'll say this instead...
I have some utilities that run as console applications when executed with command-line parameters and as WinForms applications when run without command-line parameters. Is that what you are trying to do?
To achieve this:
0) Set the project to be a console application
1) In the Main method, detect which mode you want, if you want to launch the form:
1.1) Call the Windows API method FreeConsole (to close the console window)
1.2) Run your form as you normally do
<pre lang="text">
if ( args.Length == 0 )
{
PIEBALD.Lib.LibApi.FreeConsole() ;
PIEBALD.Types.Singularity.ThereCanBeOnlyOne ( typeof(frmDBTW) ) ;
}
else
{
... Console mode code ..
}
</pre>
|
|
|
|
|
Hey guys, I have a problem, I run a code in sqlQuesry builder and it works just fine but when I apply the same thing in C# code it doesn't work !!!
in SQLQuery Builder
SELECT ID, StuName,
StuLName, Shenasnameh, StuLandline, StuMobilePhone,
StuEmail, StuAddress
FROM Students WHERE StuName like N'کیوان%'
the above code works perfectly and I get the result I want but the below code doesn't
SELECT ID, StuName,
StuLName, Shenasnameh, StuLandline, StuMobilePhone,
StuEmail, StuAddress StuEmail, StuAddress FROM Students WHERE StuLName
like N'" + StuLName_tb.Text + "%'";
I'm puzzled here because It the same code, am I missing something ???
|
|
|
|
|
I think that you have too many quotes in there. Try altering
like N'" + StuLName_tb.Text + "%'";
to
like N"'" + StuLName_tb.Text + "%" + "'";
What I think you are getting now is literally + StuLName_tb.Text%'
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
Henry Minute wrote: I think that you have too many quotes in there
so you suggest to add three double quotes?
in fact, I don't see anything wrong in the original query; I suspect there is a regional setting or an encoding problem somewhere.
|
|
|
|
|
Judging by the way that the code was formatted within the pre tags, StuLName_tb.Text was part of the string and not the value of the property.
This may simply be the result of the way that CP formatting/parsing differs from the way that VS does it.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
I do hope you will feel better tomorrow.
|
|
|
|
|
Thank you for your kind thoughts.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
You're welcome. Have a good night!
|
|
|
|
|
You're opening yourself up to SQL injection attacks[^] by doing stuff like this. You may want to consider using a SqlCommand .
/ravi
|
|
|
|
|
mrkeivan wrote: am I missing something ???
StuEmail, StuAddress<code>,</code> StuEmail, StuAddress FROM Students WHERE StuLName
--------------------^ A comma?
--edit
mrkeivan wrote: when I apply the same thing in C# code it doesn't work !!!
Does that mean that it doesn't return anything, or does that mean that it generates an error? If so, what error?
I are Troll
|
|
|
|
|
well spotted. I overlooked that, he has a comma/field imbalance, too many field names if you ask me.
|
|
|
|
|
Thanks
Would be too simple though; I guess he would have spotted that himself, probably due to copy/paste. I think you're right suspecting the collation of the field.
I are Troll
|
|
|
|
|
Luc Pattyn wrote: too many field names if you ask me
Yeah, those last two fields appear in there twice. Looks like a copy/paste error.
|
|
|
|
|
|
Is the wild card character (%) on the correct side of the search term in both cases? Maybe some problem with the right-to-left direction of arab.
Furthermore, how do you access your SQL server from C# - Ole, Odbc, the sql server classes...?
When you do the query without the WHERE statement, do you then get "correct" data or a collection of non-printable characters?
|
|
|
|
|
please don't remove messages, as you did here[^]. It is against the forum guidelines.
|
|
|
|
|
Hi all,
Can someone let me know what is happening with the following line of code? I don't understand the syntax used in after j == (arr[i].Length - 1)
Specifically what's happening with ? "" :
I do know what " " is doing at the very end.
System.Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " ");
|
|
|
|
|
the ternary operator ?: is used to choose between an empty string and a space.
x?y:z is an expression that evaluates to y or to z, depending on the boolean value of x.
another example would be:
bool equals = a==b;
Console.WriteLine(equals ? "a==b" : "a!=b");
|
|
|
|
|
? is the ternary if operator. if the condition ( j == (arr[i].Length - 1) is true, it outputs"" (the null string), if the condition is false, it outputs " " (one space.
|
|
|
|
|
Just in case you didn't understand the answers in the previous two replies.
System.Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " ");
is the same as
string result = string.Empty;
if (j == (arr[i].Length - 1))
{
result = "";
}
else
{
result = " ";
}
System.Console.Write("{0}{1}", arr[i][j], result);
The ternary operator ?: is a shorthand version of if - else. See here[^].
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
What happens with the sequence points though? For the ternary operator there is a sequence point between the condition and the second/third operand (whichever it chooses), but AFAIK not after the second/third operand (unless you close it with a semicolon, of course)
Or did MS sneakily add some sequence points there, like they did with method arguments?
|
|
|
|