Как решить Fill: свойство SelectCommand.Connection не было инициализировано

У меня есть класс, в котором я написал все свои методы. тогда у меня есть первая страница веб-приложения, где у меня есть несколько кодов. Я сталкиваюсь с этим

  • $exception {"Fill: SelectCommand.Connection свойство не было инициализировано."} System.Exception {System.InvalidOperationException}

в соответствии:

sda.Fill(dsUsers.tblMembers);

вот мой код, поэтому я надеюсь, что вы можете мне помочь:

namespace MosquesNetwork
{
public class cUsers2
{
    SqlConnection scn;
    SqlDataAdapter sda;
    SqlCommandBuilder scb;
    SqlCommand SqlStr;


    public cUsers2()
    {
        SqlConnection scn = new SqlConnection (ConfigurationManager.ConnectionStrings["MosquesDBConnectionString"].ConnectionString);

        sda = new SqlDataAdapter();
        scb = new SqlCommandBuilder(sda);


    }

public bool CheckUserName(string UserName)
    {
        DsUsers2 dsUsers=new DsUsers2();
         bool Success;
        string SqlStr="select * from tblUsers where Username='"+UserName+"' ";
        sda.SelectCommand=new SqlCommand(SqlStr, scn);
        sda.Fill(dsUsers.tblMembers);
        sda.Fill(dsUsers.tblMembers);
        Success=dsUsers.tblMembers.Rows.Count>0;
        return Success;
    }

тогда у меня есть этот код при нажатии кнопки входа в веб-форму:

 protected void Button1_Click(object sender, EventArgs e)
    {

        if (txtuser.Text.Trim().Length>0 && txtpass.Value.Length>0 )
        {  
            cUsers2 cUsers=new cUsers2();
            DsUsers2 dsUser=new DsUsers2();
            bool Success;
            if (txtuser.Text.Trim()=="admin")
            {
                Success=cUsers.CheckAdminPass(txtuser.Text.Trim(),txtpass.Value.Trim());  
                if (Success)
                {
                    Response.Redirect("WebForm2.aspx");
                }
            }

            dsUser=cUsers.Checkpassword(txtuser.Text.Trim(), txtpass.Value.Trim(),out Success);
            if(Success)
            {
                Session["ID"]=dsUser.tblMembers.Rows[0][dsUser.tblMembers.IDUserColumn].ToString();
                System.Web.HttpContext.Current.Response.Redirect("frmProfile.aspx");

            }
            else lblerror.Text="invalid username & password";

        }
    }

4 ответа

Посмотрите на своего конструктора:

SqlConnection scn = new SqlConnection(...);

Это объявление отдельного scn локальная переменная, поэтому scn переменнаяэкземпляра остается нулевой. Если вы просто измените его на:

scn = new SqlConnection(...);

это вполне может решить насущную проблему. Это не очень хороший дизайн, я бы предпочел создать SqlConnection в using блок, где вам это действительно нужно - но сейчас это не так...

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

Vishal, сэр, если вы получаете эту проблему, то убедитесь, что вы передаете "cmd" в SQL DATA ADAPTER. например:

ad = new SqlDataAdapter(cmd);
//Try To Fetch The Value Like this...
protected void Search_Emp_Click(object sender, EventArgs e)
{
    SqlCommand cmd;
    SqlConnection con;
    SqlDataAdapter ad;
    con = new SqlConnection(); //making instance of SqlConnection

    con.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString; //Invoking Connection String

    con.Open(); //Opening Connection

    if (Ddl_Emp_Search.SelectedItem.Text == "Date Of Joining")
    {
        cmd = new SqlCommand("Select Emp_Name,Contact_No,City,Emp_Desig,Place_Code from emp_registration where Emp_Doj=@Emp_Doj",con);
        cmd.Parameters.Add("@Emp_Doj", SqlDbType.NVarChar, 50).Value = TextBox1.Text;
    }
    else if (Ddl_Emp_Search.SelectedItem.Text == "Name")
    {
        cmd = new SqlCommand("Select Emp_Name,Place_Code,Emp_Code,Emp_Desig from emp_registration where Emp_Name=@Emp_Name", con);
        cmd.Parameters.Add("@Emp_Name", SqlDbType.NVarChar, 50).Value = TextBox1.Text;
    }
    else if (Ddl_Emp_Search.SelectedItem.Text == "Employee Code")
    {
        cmd = new SqlCommand("Select Emp_Name,Contact_No,City,Emp_Desig,Place_Code from emp_registration where Emp_Code=@Emp_Code", con);
        cmd.Parameters.Add("@Emp_Code", SqlDbType.NVarChar, 50).Value = TextBox1.Text;
    }
    else if (Ddl_Emp_Search.SelectedItem.Text == "City")
    {
        cmd = new SqlCommand("Select Emp_Name,Contact_No,City,Emp_Desig,Place_Code from emp_registration where City=@City", con);
        cmd.Parameters.Add("@City", SqlDbType.NVarChar, 50).Value = TextBox1.Text;
    }
    else
    {
        Response.Write("There is Something Worng....");
    }

    ad = new SqlDataAdapter(cmd); // Here IS THE PROBLEM WHEN YOU DOES'NT PASS CMD (Command instance) to the Data Adapter then there is a problem of ( Fill: SelectCommand.Connection property has not been initialized)

    DataSet ds = new DataSet();
    ad.Fill(ds);
    GridView1.DataSource = ds;
    GridView1.DataBind();
}
Другие вопросы по тегам