c#循环访问数据库
本文关键字:数据库 访问 循环 | 更新日期: 2023-09-27 18:19:48
我有以下c#代码,其中我与access db建立了连接,并使用了一些条件。我在查询中使用where子句从数据库中调用一行。当我登录到页面时,它会准确地获取数据。但过了一段时间,当我刷新页面时,它显示了以下错误
"位置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;
}
}
我正在从DB中查询数据,并使用带有全局变量的where cluster来检索单行
任何人都可以吗?请告诉我,我如何删除这个问题,或者我如何在每次用户登录时通过数据库循环,它使用循环获得数据,然后按照条件
这意味着您的查询没有返回任何内容,因此当您调用此行时:
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)判断,这似乎是一个预定义的值。。。