Как решить 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();
}