Как я могу решить nullreferenceexception для приведенного ниже кода. Помогите мне, ребята, я застрял на несколько дней! ! ! !
public partial class Admin_Control : Form { Form1.User aa; public string sa; private Form1.User ua; public Admin_Control(Form1.User s1) { InitializeComponent(); this.ua = ua; aa = s1; } private void button7_Click(object sender, EventArgs e) { Main mn = new Main(ua); mn.Show(); this.Hide(); } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 1) { OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\IT Inventory management\\IT Inventory Database.accdb"); OleDbCommand cmd = con.CreateCommand(); cmd.CommandText = "UPDATE Login SET UserRole ='Admin'"; con.Open(); cmd.ExecuteNonQuery(); MessageBox.Show("User Role Updated"); } else { MessageBox.Show("Changes Failed"); } } private void show() { DataTable dt = new DataTable(); OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\IT Inventory management\\IT Inventory Database.accdb"); OleDbCommand cmd = con.CreateCommand(); cmd.CommandText = "SELECT * FROM Login"; con.Open(); OleDbDataReader adr= cmd.ExecuteReader(); dt.Load(adr); dataGridView1.DataSource = dt; //dataGridView1.DataBind(); DataGridViewButtonColumn btn = new DataGridViewButtonColumn(); btn.HeaderText = "Change User Role"; btn.Name = "btn_change"; btn.Text = "Change"; btn.UseColumnTextForButtonValue = true; dataGridView1.Columns.Add(btn); } private void button1_Click(object sender, EventArgs e) { dataGridView1.Visible = true; show(); } private void uname() { string admi = ""; OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\IT Inventory management\\IT Inventory Database.accdb"); OleDbCommand cmd = con.CreateCommand(); cmd.CommandText = "SELECT UserRole FROM Login WHERE Username='" + sa + "' "; con.Open(); OleDbDataReader adm; adm = cmd.ExecuteReader(); } private void Admin_Control_Load(object sender, EventArgs e) { sa = aa.name; ** lbl_name.Text = aa.name; uname(); } private void button3_Click(object sender, EventArgs e) { New_User nu = new New_User(); nu.Show(); this.Close(); } } }Это код, и я получаю ошибку на коде, помеченном **
Что я уже пробовал:
This is the code and I get Error on the code marked with **
F-ES Sitecore
"aa" будет null, и вы только установите его в Admin_Control равным "s1", так что либо Admin_Control не вызывается, либо "s1" также является null. Из того, что вы опубликовали, мы не можем сказать больше. Научитесь отлаживать свой код.
Member 13820524
На самом деле значение aa исходит из приведенного ниже кода:
пространство имен IT_Inventory_Management
{
public partial class Main : форма
{
Форма 1.Пользователь aa;
общественного строка СА;
частная форма 1.Пользователь ua;
public Main(Форма 1.Пользователь s1)
{
метод InitializeComponent();
aa = s1;
this.ua = уа;
}
частная Main_Load недействительным(объект отправителя, EventArgs в электронной)
{
СА = aa.name;
lbl_name.Текст = aa.name;
администратор();
}
частный недействительными админ()
{
строки адми = "";
Метод oledbconnection кон = новый объект oledbconnection("поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=D:\в\это управление запасами \\Это базы данных инвентаризации.# то # ");
OleDbCommand cmd = con.CreateCommand();
УМК.CommandText = "SELECT UserRole FROM Login WHERE Username='"+sa+"' ";
против.Открыть();
И oledbdatareader адм;
adm= cmd.Метода executereader();
адм.Читать();
admi = adm["UserRole"].Метод toString();
если (admi."Равно" ("Админ"))
{
btn_admin.Видимое = истинное;
}
}
частный недействительными label1_Click(объект отправителя, EventArgs в электронной)
{
}
Member 13820524
и полностью связан с помощью приведенного ниже кода:
пространство имен IT_Inventory_Management
{
общественности частичного класс form1 : форма
{
открытый form1()
{
метод InitializeComponent();
}
пользователь открытого класса
{
публичное строковое имя;
}
личный логин void()
{
//Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник Данных="|Параметр Datadirectory|\Складской Базе.# то # "
Метод oledbconnection кон = новый объект oledbconnection("поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=D:\в\это управление запасами \\Это базы данных инвентаризации.# то # ");
OleDbCommand cmd = con.CreateCommand();
УМК.CommandText = "SELECT Username, Password FROM Login WHERE Username='" + txt_user.Текст + "' и пароль='" + txt_pword.Текст + "' ";
против.Открыть();
OleDbDataReader myReader;
myReader = cmd.Метода executereader();
int count = 0;
пока (myReader.Читать())
{
count = count + 1;
}
если (count == 1)
{
Пользователь UА = новый пользователь();
ua.name = txt_user.Текст;
Главная ЛБЛ = новый главный(Укр.);
ЛБЛ.Покажите();
этот.Скрыть();
txt_user.Текст = "";
txt_pword.Текст = "";
}
else if (txt_user.Text.Length == 0 || txt_pword.Text.Length == 0)
{
Ящик для сообщений.Показать("Пожалуйста, Введите Учетные Данные ");
}
еще
{
Ящик для сообщений.Show("Ошибка Входа В Систему");
txt_user.Текст = "";
txt_pword.Текст = "";
}
}
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
этот.AcceptButton = button1;
авторизоваться();
}
F-ES Sitecore
Это совершенно другая форма. У вас могут быть переменные с именем "aa" в обеих формах, но это две разные переменные, которые просто имеют общее имя. Мне нравится иметь два ящика с надписью "вилки". Если вы кладете вилку в один ящик, это не значит, что вилка находится и в другом ящике.
Member 13820524
На самом деле значение aa исходит из другой формы ниже приведен код:
пространство имен IT_Inventory_Management
{
общественности частичного класс form1 : форма
{
открытый form1()
{
метод InitializeComponent();
}
пользователь открытого класса
{
публичное строковое имя;
}
личный логин void()
{
//Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник Данных="|Параметр Datadirectory|\Складской Базе.# то # "
Метод oledbconnection кон = новый объект oledbconnection("поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=D:\в\это управление запасами \\Это базы данных инвентаризации.# то # ");
OleDbCommand cmd = con.CreateCommand();
УМК.CommandText = "SELECT Username, Password FROM Login WHERE Username='" + txt_user.Текст + "' и пароль='" + txt_pword.Текст + "' ";
против.Открыть();
OleDbDataReader myReader;
myReader = cmd.Метода executereader();
int count = 0;
пока (myReader.Читать())
{
count = count + 1;
}
если (count == 1)
{
Пользователь UА = новый пользователь();
ua.name = txt_user.Текст;
Главная ЛБЛ = новый главный(Укр.);
ЛБЛ.Покажите();
этот.Скрыть();
txt_user.Текст = "";
txt_pword.Текст = "";
}
else if (txt_user.Text.Length == 0 || txt_pword.Text.Length == 0)
{
Ящик для сообщений.Показать("Пожалуйста, Введите Учетные Данные ");
}
еще
{
Ящик для сообщений.Show("Ошибка Входа В Систему");
txt_user.Текст = "";
txt_pword.Текст = "";
}
}
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
этот.AcceptButton = button1;
авторизоваться();
}
частная linkLabel1_LinkClicked недействительным(объект отправителя, LinkLabelLinkClickedEventArgs е)
{
//New_User nu = новый New_User();
//компания NU.Показать();
//этот.Скрыть();
}
частная groupBox1_Enter недействительным(объект отправителя, EventArgs в электронной)
{
}
частный недействительными методе button2_click(объект отправителя, EventArgs в электронной)
{
}
}
}
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
Также, НИКОГДА храните пароли в виде обычного текста.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]
Member 13820524
Спасибо вам, сэр, за помощь. очень ценю это.
Member 13820524
- Спасибо, сэр. Очень ценю вашу помощь.