Virendra S from Bangalore, Karnataka Ответов: 4

Ошибка Invalidoperationexception в C#


InvalidOperationException error in C#

Мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace Expense_System
{
    public partial class Transactions : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            String strConnString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;

            SqlConnection con = new SqlConnection(strConnString);

            con.Open();

            SqlCommand cmd = new SqlCommand("select * from Expense_Type");

            DropDownListexpensetype.DataSource = cmd.ExecuteReader();
            DropDownListexpensetype.DataTextField = "Expense_Type";
            DropDownListexpensetype.DataValueField = "Expense_Type";
            DropDownListexpensetype.DataBind();
       


        }

        protected void BtncreateExpense_Click(object sender, EventArgs e)
        {
           

        }

    }
}


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

Погуглил его, но не получил правильного решения

Jochen Arndt

Было бы неплохо знать, какой вызов функции вызывает execption.

Это может быть кон.Открывать(). Затем проверьте строку подключения.

Это может быть также позже при использовании объекта SqlDataReader, возвращаемого cmd.Метода executereader(). Но вы не показали код, используя его.

F-ES Sitecore

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

4 Ответов

Рейтинг:
34

Vincent Maverick Durano

Просто хотел кое-что добавить к тому, что они предложили. Вот несколько моментов, которые вы хотите рассмотреть:

(1) при связывании а Data Control вручную в событии Page_Load убедитесь, что вы обернули свой код для привязки внутри !IsPostback блокируйте, чтобы избежать неожиданных результатов.

(2) сделайте привычкой ставить objects которые едят такие ресурсы, как SqlConnection, SqlCommand и SqlDataAdapter в using statement чтобы убедиться, что объекты будут правильно утилизированы и закрыты после их использования.


protected void Page_Load(object sender, EventArgs e){
      if(!IsPostback){
	          BindList();
       }  
}


private void BindList(){
     	String strConnString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
            using(SqlConnection con = new SqlConnection(strConnString)){
            	using(SqlCommand cmd = new SqlCommand("select * from Expense_Type", con)){
			         con.Open();
            		DropDownListexpensetype.DataSource = cmd.ExecuteReader();
            		DropDownListexpensetype.DataTextField = "Expense_Type";
            		DropDownListexpensetype.DataValueField = "Expense_Type";
            		DropDownListexpensetype.DataBind();
	    	}
	    }
}


Примечание: Я заметил, что вы назначили это поле Expense_Type для обеих сторон Text и Value Просто убедитесь, что DataValueField содержат уникальные значения, чтобы избежать неожиданного поведения при выборе/предварительном выборе значений из списка.


Рейтинг:
24

ZurdoDev

Вы не можете получить правильное решение от google, потому что вы не знаете, какая строка кода вызывает эту ошибку. Ошибка довольно общая. Кроме того, в сообщении об ошибке есть еще что-то, так что вам тоже нужно поделиться этим.

Однако я могу рассказать вам об одной проблеме. Вы не связали команду SqlCommand с соединением. Вы можете сделать это:

SqlCommand cmd = new SqlCommand("select * from Expense_Type", con);


Vincent Maverick Durano

5ед. Отличный улов!

Virendra S from Bangalore, Karnataka

Спасибо, это сработало.. исправленный код-это /* SqlCommand cmd = new SqlCommand("select * from Expense_Type", con); */

Рейтинг:
10

kongalshiva549

SqlCommand cmd = new SqlCommand("select * from Expense_Type", con);


вы пропустили экземпляр соединения, пожалуйста, проверьте выше строку. это должно сработать


Richard Deeming

Как упоминалось на прошлой неделе в решении 1.

И снова сегодня утром в решении 3.

Рейтинг:
0

Virendra S from Bangalore, Karnataka

Проблема была исправлена.
Исправлена часть кода:

SqlCommand cmd = new SqlCommand("select * from Expense_Type", con);