|
When I add (N) before word it started working!!!
Thank you very much!!!
|
|
|
|
|
You're welcome!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
How to check if entered textbox value exist in SQL server Database?If it exist it should print "the entered value exist in database.
|
|
|
|
|
|
Can it be done like this:
using (SqlConnection connection = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("SELECT * FROM table1 WHERE Reci='" + textBox1.Text + "'", connection);
try
{
connection.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
int j = ds.Tables[0].Rows.Count;
if (j == 0)
{
MessageBox.Show("word" + textBox1.Text + "already exists!");
ds.Clear();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
|
|
|
|
|
Do not use string concatenation to insert values into SQL statements!
Learn to use parameterized statements.
And that is not a reasonable use case for a DataAdapter; ExecuteScalar will suffice.
modified 10-Dec-16 10:51am.
|
|
|
|
|
The basic idea is correct but few things to notice:
- you're missing using block for the SqlCommand
- you don't close the connection
- most importantly you don't use SqlParameter which leaves you open to SQL injections.
Concerning those topics, please go through Properly executing database operations[^]
Another thing is that you fetch the data into a dataset using a data adapter. While this approach does work, it contains unnecessary phases if you just need to know if the value exist or not. For that purpose SqlCommand.ExecuteScalar Method (System.Data.SqlClient)[^] should be sufficient.
As a side note, you probably should check that the input is valid. If you expect just a single word then check for whitespace and so on.
|
|
|
|
|
How to make that when user enter word using given random letters from labels in textbox,user cannot enter letter that does not exist in given letters???
For example if in label is one 'A' he can type it only once,if in labels are two 'D' he can type it only twice.
|
|
|
|
|
Trap the KeyPressed event on the textbox and write code accordingly.
|
|
|
|
|
I don't know how to make this!!!
|
|
|
|
|
Google the phrase:
c# textbox kepress event
|
|
|
|
|
I know that but I don't know how to check what characters user typed!!!
|
|
|
|
|
You don't have to!
That is why we have documentation, but you will need to learn to read that. There's an event that is fired when the user presses a key, and it will provide you with two things; the key that was pressed, and the option to cancel that.
Now go research
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Just picking one of the answers from Google which gives examples
[^]
|
|
|
|
|
WPF or Windows Forms?
I had to code a "numerics" only TextBox in WPF the other day (PreviewKeyDown event):
private void uxRunCount_PreviewKeyDown( object sender, System.Windows.Input.KeyEventArgs e ) {
bool ok = IsNumeric( e.Key );
if ( !ok ) {
e.Handled = true;
}
}
private bool IsNumeric( Key key ) {
if ( key == Key.Back || key == Key.Delete ) { return true; }
if ( key == Key.Tab || key == Key.Return ) { return true; }
if ( key >= Key.D0 && key <= Key.D9 ) { return true; }
if ( key >= Key.NumPad0 && key <= Key.NumPad9 ) { return true; }
return false;
}
|
|
|
|
|
When you write a KeyPress handler for the TextBox, you get two parameters:
private void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
sender is the text box that generate the event.
e is the information on the key press.
This information includes the key pressed:
char keyPressedByUser = e.KeyChar; And Handled which is a bool which the TextBox looks at when you are finished to decide if it should treat the key as input or not. If you set it to true the Textbox will ignore the user input. If you leave it at false the TextBox will insert the character to the textbox.
You also have the Text property of the TextBox which means you can get the data currently in it.
From that and your labels, you should be able to work out how to restrict the user input just as you wanted.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Something like this?
var allowedKeys = promesana_rec.Select(ch => (Keys)Convert.ToInt32(char.ToUpper(ch)));
e.SuppressKeyPress = !allowedKeys.Contains(e.KeyCode) && new[] { Keys.None, Keys.Shift }.Contains(e.Modifiers);
|
|
|
|
|
Not by preference, no.
Why are you converting your character to a Key value? Although you can, it's not good practice - and doing Linq Selects each time the user presses a key is hardly efficient.
What - exactly - do you have in your labels that you are comparing against?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Every time I start program it takes random word from database shuffle it and show letters of that word inside 12 labels!!!
|
|
|
|
|
So the letters in the labels are already characters, and you have them originally as a string, yes?
So don't faf about with converting them at all. Instead, use the string version. Then, when they type a character you can tell if any are permitted immediately by just using string.Contains:
private string theWord = "extemporized".ToUpper();
...
private void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
char keyPressedByUser = char.ToUpper(e.KeyChar);
if (!theWord.Contains(keyPressedByUser))
{
e.Handled = true;
return;
}
...
}
Multiples are harder. They take a bit more work to ensure that the user can only enter three "E"'s to the example I gave.
To do that, add another private variable:
private Dictionary<char, int> letters;
And when you read the word from your database, set it:
letters = theWord.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
Now you can use the Dictionary to decide if he has typed enough letters yet:
private void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsLetter(e.KeyChar))
{
char keyPressedByUser = char.ToUpper(e.KeyChar);
if (!theWord.Contains(keyPressedByUser))
{
e.Handled = true;
return;
}
int inputCount = myTextBox.Text.ToUpper().Where(c => c == keyPressedByUser).Count() + 1;
if (inputCount > letters[keyPressedByUser])
{
e.Handled = true;
return;
}
e.Handled = false;
}
} Note that you need the IsLetter check or backspace will stop working!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
When I insert these commands and start program I cannot type any letter,I can only insert numbers and symbols!!!!!
|
|
|
|
|
Did you do the dictionary create bit after you loaded the word?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Do you mean this:
letters = shuffled_word.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
|
|
|
|
|
Show me the code that reads the word and includes that.
Add the code of your textbox handler.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
private Dictionary<char, int> letters;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
letters = promesana_rec.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
if (char.IsLetter(e.KeyChar))
{
char keyPressedByUser = char.ToUpper(e.KeyChar);
if (!promesana_rec.Contains(keyPressedByUser))
{
e.Handled = true;
return;
}
int inputCount = textBox1.Text.ToUpper().Where(c => c == keyPressedByUser).Count() + 1;
if (inputCount > letters[keyPressedByUser])
{
e.Handled = true;
return;
}
e.Handled = false;
}
}
|
|
|
|