alexzaf Ответов: 2

System.invalidoperationexception ошибка, и я не могу ее исправить


Система.Исключение InvalidOperationException
HResult=0x80131509
Message=Fill: SelectCommand.Свойство соединения не было инициализировано.
Источник=<не может оценить="" исключение="" Источник=" " >
Трассировка стека:
<не удается оценить="" исключение="" стек="" трассировка=" " >




использование системы;
использование системы.Коллекции.Общий;
использование System.Data;
используя системы.Данных.Поставщики sqlclient;
использование System.Linq;
использование системы.Сеть;

проект пространства имен
{
открытый класс даль
{
частное соединение SqlConnection;
частная команда sqlcommand, который ;
частный адаптер SqlDataAdapter;
частная строка SQLstr;
частная строка connectionString;

общественные даль()
{
connectionString = строка.Формат(@"данные Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\zafal\source\repos\finalprojectrecipe\finalprojectrecipe\db.mdf;Интегрированная безопасность=True;время ожидания подключения=30");
SQLstr = "Select *from Users";
command = new SqlCommand(SQLstr, соединение);
adapter = new SqlDataAdapter(команда);
}

публичный набор данных GetDataSetWithSql(string strSQL)
{
DataSet dataset = новый набор данных();
команда.CommandText = strSQL;
адаптер.SelectCommand = команда;
адаптер.SelectCommand = команда;

адаптер.Заливка(набор данных);
возвращаемый набор данных;
}

общественная int вставить(строка имени, lname в строку, строка электронной почты, пароль)
{
успех инт = -1;

используя(sqlconnection для подключения = новое sqlconnection(connectionString и))
{
соединение.Открыть();
строка SQL = "вставить в пользователи(имени,lname в,почту,пароль,админ) значения(@пасс, электронная почта,@param3,@param4,@param5,@param6)";
using (SqlCommand cmd = new SqlCommand(sql, connection))
{
cmd.Parameters.Add("@email", SqlDbType.NVarChar, 40).Value = email;
cmd.Parameters.Add("@pass", SqlDbType.NVarChar, 40).Value = пароль;
cmd.Parameters.Add("@param3", SqlDbType.NVarChar, 20).Value = fname;
cmd.Parameters.Add("@param4", SqlDbType.NVarChar, 20).Value = lname;
cmd.Parameters.Add("@param5", SqlDbType.Int).Значение = 0;
cmd.Parameters.Add("@param6", SqlDbType.tinyint).Значение = 0;
УМК.Свойство Commandtype = Значение Commandtype.Текст;
успех = cmd.Метод executenonquery();

Что я уже пробовал:

я пробовал chnaging код, но я новичок и не знаю, что делать

2 Ответов

Рейтинг:
1

Mahesh Pratap Singh

В

public DAL()
{
после назначения
connectionString 

добавьте этот код:
connection = new SqlConnection(connectionString);

Это должно сработать. Хотя в вашем коде есть много других требований к рефакторингу кода.
Но на данный момент то, что я предложил, должно решить вашу проблему.


Рейтинг:
0

OriginalGriff

Прочтите сообщение об ошибке:

Message=Fill: SelectCommand.Connection property has not been initialized.

Это не может быть намного яснее, чем это!
Итак, теперь посмотрите на свой код, который использует метод заполнения: существует только один вызов для заполнения этого кода:
public DataSet GetDataSetWithSql(string strSQL)
    {
    DataSet dataset = new DataSet();
    command.CommandText = strSQL;
    adapter.SelectCommand = command;
    adapter.SelectCommand = command;
    
    adapter.Fill(dataset);
    return dataset;
    }
Где в этом коде устанавливается соединение?
Нет соединения == нет идеи, откуда взять данные == сообщение об ошибке.


alexzaf

что такое набор соединений?

OriginalGriff

- Где в этом коде установлена связь?"
Позвольте мне попытаться перефразировать это ...
- Посмотри на свой код.
Найдите везде, где вы используете объект соединения.
Из всех этих мест, какое дает ему значение вместо того, чтобы читать значение из него?"