Ошибка"необходимо объявить скалярную переменную @username"
Привет,
У меня есть проблема с моим кодом,особенно в форме входа в систему.Я хочу войти в свое приложение,но когда я ввожу учетные данные,я получаю ошибку"должен объявить переменную @UserName".Я установил точку останова,чтобы увидеть,является ли значение нулевым, но это не так, все работает, кроме имени пользователя.Я просмотрел переплет и синтакс, и все в порядке.Это виртуальная машина:
public void SubmitButton(object param) { SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\user0909\Documents\AttendanceListStudents.mdf;Integrated Security=True;Connect Timeout=30"); try { if (conn.State == System.Data.ConnectionState.Closed) conn.Open(); String query = "SELECT COUNT (*) FROM RegisterTeacher WHERE UserName=@UserName,pwd=@pwd and pwd2=@pwd2"; SqlCommand cmd = new SqlCommand(query, conn); cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue("@UserName", SqlDbType.NVarChar).Value =_UserName;//here I have the error SqlParameter Pwd = cmd.Parameters.AddWithValue("@pwd", SqlDbType.Char); cmd.Parameters["@pwd"].Value = TestPassword; if (Pwd.Value == null) { Pwd.Value = DBNull.Value; } SqlParameter Pwd2 = cmd.Parameters.AddWithValue("@pwd2", SqlDbType.Char); //cmd.Parameters["@pwd"].Value = _pwd.pwd; cmd.Parameters["@pwd2"].Value = pwd2; if (Pwd2.Value == null) { Pwd2.Value = DBNull.Value; } SqlDataAdapter da = new SqlDataAdapter(query, conn); DataTable dt = new DataTable(); da.Fill(dt); if(dt.Rows.Count==1) { TestPassword = dt.Rows[0][1].ToString(); byte[] hashBytes = Convert.FromBase64String(TestPassword); byte[] salt = new byte[16]; Array.Copy(hashBytes, 0, salt, 0, 16); var pbkdf2 = new Rfc2898DeriveBytes(TestPassword, salt, 10000); byte[] hash = pbkdf2.GetBytes(20); int count = Convert.ToInt32(cmd.ExecuteScalar()); for (int i = 0; i < 20; i++) { if(hashBytes[i+16]!=hash[i]) { count = 0; }if(count==1) { var app = new TextBoxFocusView(); var context = new TextBoxFocusDb(); app.DataContext = context; app.Show(); } } }
И это datacontext int представление:
<Label Content="Username" Foreground="White"/> <TextBox Name="txtusername" Text="{Binding Path=UserName}" Background="#545d6a" Foreground="White" FontSize="18"/> <Label Content="Password" Foreground="White"/> <PasswordBox x:Name="passwordBox" MaxLength="10" local:PasswordHelper.BindPassword="true" local:PasswordHelper.BoundPassword="{Binding Path=TestPassword, Mode=TwoWay, ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}" PasswordChar="*" Background="#545d6a" Foreground="White" FontSize="18"/>
Может ли кто-нибудь помочь мне понять, в чем проблема?Заранее благодарю вас!
Что я уже пробовал:
I have tried multiple things to make it work,I tried creating another variable and assigning the value to it,I tried this: <a href="https://stackoverflow.com/questions/8933634/must-declare-the-scalar-variable-username">c# - Must declare the scalar variable "@UserName" - Stack Overflow</a>[<a href="https://stackoverflow.com/questions/8933634/must-declare-the-scalar-variable-username" target="_blank" title="New Window">^</a>]
c# - необходимо объявить скалярную переменную "@username". Как это преодолеть - переполнение стека[^]
Herman<T>.Instance
Каково значение в _UserName? Если это значение равно NULL, то параметр не отправляется в базу данных. Чтобы преодолеть эту проблему, установите нулевое значение в DBNull.Ценность. В этом случае параметр отправляется в базу данных.
Daniel Andrei Popescu
Спасибо за ваш ответ.Это не ноль.Он имеет ценность,вот в чем проблема.Когда я устанавливаю точку останова и вставляю значение в текстовое поле,а затем отлаживаю его, я получаю значение без каких-либо проблем.