日期:2014-05-18  浏览次数:20399 次

请问大家这样做是否效率比较低下?怎么样能判断SqlDataReader是否读取数据成功?
Private Sub TestPhone_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPhone.Click
  Locality.Text = ""
  Mycomponent.SqlCommand1.Parameters("@phone").Value = TboxPhone.Text
  Mycomponent.SqlConnection1.Open()
  Dim dr As SqlClient.SqlDataReader
  dr = Mycomponent.SqlCommand1.ExecuteReader
  While dr.Read()  
  Locality.Text = dr.GetString(1)
  Acreage.Text = dr.GetString(4)
  Price.Text = dr.GetString(5)
  LinkMan.Text = dr.GetString(6)
  Phone1.Text = dr.GetString(7)
  Phone2.Text = dr.GetString(8)
  Description.Text = dr.GetString(9)  
  End While
  dr.Close()
  Mycomponent.SqlConnection1.Close()
  If Locality.Text = "" Then
  Label1.Text = "不存在"
  Label1.Visible = True
  Else
  Label1.Visible = False
  Panel1.Visible = True
  End If
  End Sub

------解决方案--------------------
你的代码不是效率问题,而是潜在的数据库链接问题,维护的问题(sql代码与界面代码相混)

还有把While改成if

Private Sub TestPhone_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPhone.Click 
Locality.Text = "" 

Try

Mycomponent.SqlCommand1.Parameters("@phone").Value = TboxPhone.Text 
Mycomponent.SqlConnection1.Open() 
Dim dr As SqlClient.SqlDataReader 
dr = Mycomponent.SqlCommand1.ExecuteReader 
if dr.Read()
Locality.Text = dr.GetString(1) 
Acreage.Text = dr.GetString(4) 
Price.Text = dr.GetString(5) 
LinkMan.Text = dr.GetString(6) 
Phone1.Text = dr.GetString(7) 
Phone2.Text = dr.GetString(8) 
Description.Text = dr.GetString(9)
End if
dr.Close() 

Finally
Mycomponent.SqlConnection1.Close() 
End Try


If Locality.Text = "" Then 
Label1.Text = "不存在" 
Label1.Visible = True 
Else 
Label1.Visible = False 
Panel1.Visible = True 
End If 
 End Sub

考虑把数据库访问逻辑移到另外的类去,返回一个数据实体