Получение исключения при вызове подпрограммы ExecuteReader - PullRequest
0 голосов
/ 22 июня 2011

У меня есть база данных SQL Server Compact 3.5, которая содержит информацию об учетной записи.Но каждый раз, когда я вызываю функцию ExecuteReader, я получаю следующее исключение:

Недопустимое имя столбца.[Имя узла (если есть) =, имя столбца = ID]

Но это правильное имя столбца.Имена столбцов следующие: Имя пользователя, Пароль, Дата создания и т. Д.

Ниже приведен код:

            SqlCeConnection connection = new SqlCeConnection(@"Data Source=C:\Users\Danny\Documents\Visual Studio 2010\Projects\Databinding Login Form\Databinding Login Form\MyDatabase#1.sdf; Password=*********");
            connection.Open();
            SqlCeCommand com = new SqlCeCommand("SELECT * FROM Accounts WHERE ID=Username", connection);
            SqlCeDataReader reader = com.ExecuteReader();
            if (username.Text == reader["Username"] as string && password.Text == reader["Password"] as string)
            {
                MessageBox.Show("Login Successfull!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("Access Denied 5", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

Ответы [ 3 ]

2 голосов
/ 22 июня 2011

У вас есть столбец с именем "ID"?

Похоже, вы запрашиваете все учетные записи, которые имеют одинаковое значение в столбцах "Имя пользователя" и "Идентификатор"? Вы хотели заменить "ID" на что-то?

Пример

Where Username = 'EnteredUsername'
0 голосов
/ 22 июня 2011

Предложение where является причиной ошибки.Я предполагаю, что вы хотите выбрать только одну учетную запись, идентификатор которой равен локальной переменной вызывающего абонента username.Одно из решений:

SqlCeCommand com = new SqlCeCommand("SELECT * FROM Accounts WHERE ID='"
  + username + "'", connection);

Более правильным решением является использование SqlCeParameter:

SqlCeCommand com = new SqlCeCommand("SELECT * FROM Accounts WHERE ID=@UserName", connection);
SqlCeParameter param = new SqlCeParameter("@UserName", SqlDbType.NVarChar);
param.Value = username;
com.Parameters.Add(param);
0 голосов
/ 22 июня 2011

Похоже, что ваш запрос "ВЫБРАТЬ * ОТ УЧЕТНЫХ ЗАПИСЕЙ, ГДЕ ID = Имя пользователя" может быть проблемой. Как вы упомянули, имя пользователя - это имя столбца; Похоже, вы должны поместить идентификатор пользователя в запросе, например, "dlopez": "SELECT * FROM Accounts WHERE ID = 'dlopez'"

...