data adapter.select command.connection

Я использую приведенный ниже код для получения данных из базы данных. Но сразу же, когда точка останова переходит на любую строку после var k, возникает исключение.

 DataSet ds = new DataSet();
            try
            {
                using (SqlConnection con = new SqlConnection())

                {
                    con.ConnectionString = @"Data Source = sql\db1,5000; Initial Catalog = uatdb; Integrated Security = SSPI";

                    using (SqlDataAdapter da = new SqlDataAdapter())
                    {
                        var k = con.State;

обновление:
добавил эту строку из ответа, но не помогает, все та же ошибка

                        da.selectcommand=new sqlcommand();

                        da.SelectCommand.Connection.ConnectionString= con.ConnectionString;
                        da.SelectCommand.CommandText = "usp_checkstatus";
                        da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = TextBox1.Text.ToString(); ;
                        da.SelectCommand.CommandType = CommandType.StoredProcedure;


                        //  da.SelectCommand.Parameters.AddWithValue("@buildid", TextBox1.Text);

                        da.Fill(ds);
                        return ds;


                    }
                }
            }

**** Сведения об исключении: ****

ссылка на объект не установлена ​​​​на экземпляр объекта. Состояние подключения всегда закрыто, и БД, строки подключения верны, я не открываю соединение, так как адаптер данных откроет соединение для меня.

Ответ может быть простым, но сейчас он съел почти 4 часа моего времени. Любая помощь очень ценится.

Примечание. Я мог бы заставить это работать с кодом в вопросе ниже, используя sqlcommand, но я хочу попробовать использовать адаптер данных.

Как использовать DataAdapter с хранимой процедурой и параметром


person TheGameiswar    schedule 11.07.2015    source источник
comment
Это буквально ваш код? Потому что он не будет компилироваться без надлежащего корпуса   -  person Crowcoder    schedule 11.07.2015
comment
его компиляция, я удалил только блок catch. Я скопировал вставку из VS   -  person TheGameiswar    schedule 11.07.2015


Ответы (2)


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

DataSet ds = new DataSet();
try
{
    using (SqlConnection con = new SqlConnection(@"Data Source = sql\db1,5000; 
           Initial Catalog = uatdb; Integrated Security = SSPI"))
    using (SqlDataAdapter da = new SqlDataAdapter("usp_checkstatus", con))
    {
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(TextBox1.Text);
        da.Fill(ds);
        return ds;
    }
}

Также нет необходимости создавать конкретную SqlCommand. Когда вы создаете адаптер и передаете имя хранимой процедуры, для вас автоматически создается новый SqlCommand, конечно, вам все равно нужно установить его параметры и его CommandType. (Примечание к параметру, я не уверен, может ли это привести к неправильным результатам в вашем sp, но кажется безопасным, если вы хотите передать целое число, а затем преобразовать ввод в целое число)

person Steve    schedule 11.07.2015
comment
Спасибо за дополнительный совет по целочисленному преобразованию, - person TheGameiswar; 11.07.2015

Вы должны создать экземпляр свойства SelectCommand:

 using (SqlDataAdapter da = new SqlDataAdapter())
   {
    da.SelectCommand = new SqlCommand();
    da.SelectCommand.Connection=con;
    ..
   }

Или создайте объект SqlCommand и назначьте его ссылку свойству SelectCommand.

var cmd = new SqlCommand();
cmd.CommandText = "your-proc-name";
cmd.Connection = con;
.....
adp.SelectCommand = cmd;
person kv-prajapati    schedule 11.07.2015
comment
Во-первых, большое спасибо за немедленный ответ, но все та же проблема. Обновлен мой вопрос с кодом, который вы предложили. - person TheGameiswar; 11.07.2015
comment
@TheGameiswar Установить con ссылку на Connection свойство - person kv-prajapati; 11.07.2015