Имя «вставьте имя здесь» не существует в текущем контексте

Я не понимаю, почему в этом запросе "dbo"

var searchUser = from user in dbo.Accounts
                             where user.accnt_user == txtUser.Text &&
                             user.accnt_pass == txtPassword.Text
                             select user;

Показывает эту ошибку

"Имя "dbo" не существует в текущем контексте"

но когда я удаляю слово "dbo", он показывает мне эту ошибку

Учетные записи имен не существуют в текущем контексте.

Вот моя таблица введите здесь описание изображения

и внутри моего DataClasssesContext у меня есть это

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Accounts")]
    public partial class Account : INotifyPropertyChanging, INotifyPropertyChanged
    {

        private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

        private int _accnt_ID;

        private string _accnt_User;

        private string _accnt_Pass;

        private string _accnt_Position;

    #region Extensibility Method Definitions
    partial void OnLoaded();
    partial void OnValidate(System.Data.Linq.ChangeAction action);
    partial void OnCreated();
    partial void Onaccnt_IDChanging(int value);
    partial void Onaccnt_IDChanged();
    partial void Onaccnt_UserChanging(string value);
    partial void Onaccnt_UserChanged();
    partial void Onaccnt_PassChanging(string value);
    partial void Onaccnt_PassChanged();
    partial void Onaccnt_PositionChanging(string value);
    partial void Onaccnt_PositionChanged();
    #endregion

        public Account()
        {
            OnCreated();
        }

        [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_accnt_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
        public int accnt_ID
        {
            get
            {
                return this._accnt_ID;
            }
            set
            {
                if ((this._accnt_ID != value))
                {
                    this.Onaccnt_IDChanging(value);
                    this.SendPropertyChanging();
                    this._accnt_ID = value;
                    this.SendPropertyChanged("accnt_ID");
                    this.Onaccnt_IDChanged();
                }
            }
        }

Я не публиковал весь свой код в контексте данных, потому что он длинный.


person user962206    schedule 24.02.2012    source источник
comment
Объявили ли вы переменную или поле с именем dbo в вашем текущем методе или классе? Потому что ошибка говорит вам, что вы этого не сделали.   -  person Anthony Pegram    schedule 24.02.2012
comment
Так? DataClasses1DataContext myDbContext = новый DataClasses1DataContext (dbPath);   -  person user962206    schedule 24.02.2012
comment
Не по теме, но у меня есть опасения, что вы можете хранить пароли в базе данных в виде простого текста. Это не особенно безопасно. Сделайте себе одолжение и изучите методы безопасного хранения.   -  person Anthony Pegram    schedule 24.02.2012
comment
@ Энтони Пеграм, я понятия не имею, что это за методы, не могли бы вы предложить один?   -  person user962206    schedule 24.02.2012
comment
Распространенным методом является хеширование с использованием солей. Выполните поиск в Google/StackOverflow по этим терминам. Существуют также поставщики членства, которые могут сделать за вас всю тяжелую работу в ASP.NET, например.   -  person Anthony Pegram    schedule 24.02.2012


Ответы (1)


Эта ошибка говорит вам именно то, что вам нужно знать, что имя dbo не существует. Не существует переменной, поля или статического класса, доступного в этой строке кода, и поэтому компилятор сообщает вам, что имя не существует в текущем контексте.

Например, учитывая этот класс и определение метода

class Foo
{
    public void Frob()
    {
        Console.WriteLine(bar); // bar does not exist!
    }
}

bar не относится ни к локальной переменной, ни к полю класса и приведет к той же ошибке, которую вы наблюдали.

Что касается вашего конкретного кода, ваш комментарий к вопросу указывает на то, что у вас есть экземпляр класса DataClasses1DataContext. Это более чем вероятно то, что вам нужно использовать в вашем запросе.

using (var myDbContext = new DataClasses1DataContext())
{
    var query = from user in myDbContext.Accounts
                where user.Blah == whatever
                select user;

     // use query results
}
person Anthony Pegram    schedule 24.02.2012
comment
Глупый я забыл dbContext ›.‹ Спасибо, ребята! - person user962206; 24.02.2012