#c# #sql #sql-server #database #exception
#c# #sql #sql-сервер #База данных #исключение
Вопрос:
Первое случайное исключение типа ‘System.Data.SqlClient.SQLException’ произошло в System.Data.dll
Дополнительная информация: недопустимое имя объекта ‘Login’.
Вот код :
public partial class Form1 : MetroFramework.Forms.MetroForm
{
public Form1()
{
InitializeComponent();
}
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)v11.0;AttachDbFilename=C:UsersIgurekDocumentsDatabase.mdf;Integrated Security=True;Connect Timeout=30");
private void metroButton1_Click(object sender, EventArgs e)
{
this.Close();
}
private void metroButton2_Click(object sender, EventArgs e)
{
SqlDataAdapter sdf = new SqlDataAdapter("Select Count(*) From Login where Username='" metroTextBox1.Text "' and Password='" metroTextBox2.Text "'", con);
DataTable dt = new DataTable();
sdf.Fill(dt); // <--------- Here's the exception
if (dt.Rows.Count == 1)
{
Form1 f1 = new Form1();
f1.Show();
}
else
{
MessageBox.Show("Sprawdz Nazwe i Haslo");
}
}
}
Скриншот:
Ответ №1:
Сообщение довольно ясное: у вас нет объекта (таблицы, представления) в вашей базе данных с именем Login
. Ваш запрос пытается сделать выбор из этого объекта.
Select Count(*) From Login where...
Большая и более важная проблема здесь заключается в том, что вы открываете себя для атаки SQL-инъекций, потому что вы объединяете строки вместе для создания запроса. Вы должны использовать параметры вместо того, чтобы делать это.
SqlDataAdapter sdf = new SqlDataAdapter(
"Select Count(*) From Login where Username=@UserName and Password=@Password", con);
command.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = metroTextBox1.Text;
command.Parameters.Add("@Password", SqlDbType.NVarChar).Value = metroTextBox2.Text;
Комментарии:
1. вау, спасибо, что приложили усилия. я слепой, и я не знаю, как изменить имя таблицы с «Table» на «Login» idk. brb
2. Спасибо, я был слеп или пьян (ха-ха) при добавлении вопроса. Я исправил это, удалив старые таблицы и создав новые с именем «Login»
Ответ №2:
попробуйте задать имя для вашего счета следующим образом:
Select Count(*) as Nb From Login