我有c#的下面代码,其中我与访问db和使用一些条件建立连接。我通过在查询中使用where子句从db调用单行。当我登录到页面时,它准确地获取数据。但是一段时间后,当我刷新页面时,它会显示以下错误
“0号位没有排” 我的代码是Bellow
protected void Page_Load(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|OID.mdb;Persist Security Info=False;");
//OleDbConnection con = new OleDbConnection("Data Source=sml; User ID=sml; Password=sml; provider=OraOLEDB.Oracle");
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "Select * from EMAILS WHERE EMAIL= '" + GlobalData.Email + "'";
//cmd.CommandText = "Select * from EMAILS";
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
String email = ds.Tables[0].Rows[0][1].ToString();
if (email == GlobalData.Email)
{
Label2.Text = GlobalData.Email;
Label1.Text = GlobalData.Name;
Label3.Text = GlobalData.LastName;
Label1.Visible = false;
Label3.Visible = false;
Label4.Text = Label1.Text + ' ' + Label3.Text;
}
}
我正在查询来自数据库的数据,并使用全局变量的cluse来检索单行
可以任何一个请告诉我,我该如何删除此问题,或者我可以循环访问数据库,当用户登录时,使用循环获取数据,然后按照条件
答案 0 :(得分:1)
这意味着您的查询没有返回任何内容,因此当您调用此行时:
String email = ds.Tables[0].Rows[0][1].ToString();
你得到一个例外,因为没有Row[0]
如果您想避免该错误,请执行以下操作:
if (ds.Tables[0].Rows.Count>0)
{
String email = ds.Tables[0].Rows[0][1].ToString();
///...
}
不要在代码中执行select *
。习惯于列出要从表中选择的确切列。例如:
select email_address from Emails where id= 5
额外评论:您的上述查询毫无意义;您似乎正在尝试使用where子句中的相同电子邮件地址从表中选择电子邮件地址。如果您已经知道电子邮件,为什么还需要从数据库中选择它?根据变量名称( GlobalData.Email )判断,这似乎是预定义的值...