2014-04-06 3 views
0

vb.net 응용 프로그램을 통해 간단한 SQL Server 쿼리 작업을 작성하고 있습니다. 나는 이상한 문제가있다.간단한 선택 쿼리가 vb.net과 작동하지 않습니다. 삭제 쿼리가 제대로 작동합니다.

이 줄은주고 오류 :

dr = cmd.ExecuteReader() 

이 날 오류주고있다 "잘못된 열 이름 abhishek을." 여기 abhishek은 내가 제공하는 데이터입니다 TextBox1.Text. 이 질문은 단순한 질문이므로 내 편에서는 실수를 생각할 수 없습니다. 다른 쿼리를 삭제 쿼리와 같은 다른 테이블에서 실행할 수 있습니다. 데이터베이스 문제가 아닙니다.

실마리가 잘못되었습니다.

reginfo은 테이블 이름입니다. name은 필드 중 하나입니다. 이름 필드는 작은 따옴표에 텍스트 상자를 묶어야합니다 다음 텍스트 필드

Imports System.Data.Sql 
Imports System.Data.SqlClient 
Public Class Form9 
    Dim con As New SqlConnection() 
    Dim cmd As New SqlCommand() 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     cmd.CommandText = "select * from reginfo where name=" + (TextBox1.Text) + "" 
     Dim dr As SqlDataReader 
     con.Open() 
     cmd.Connection = con 
     dr = cmd.ExecuteReader() '<<< This line is creating problem 
     If dr.Read() Then 
      TextBox2.Text = dr(0).ToString() 
     End If 
     con.Close() 
    End Sub 

    Private Sub Form8_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     con.ConnectionString = "Data Source=ABHISHEK-PC\SQLEXPRESS;Initial Catalog=locserver;Integrated Security=True;Pooling=False" 
    End Sub 

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click 

    End Sub 

End Class 

답변

2

경우,하지만이주는 나쁜 조언입니다 :

내 전체 코드는 다음과 같습니다. 상황이 이런 종류의 유일한 좋은 방법은 연결 또는 명령과 같은 전역 개체를 유지하지 않는 매개 변수가있는 쿼리 또한

cmd.CommandText = "select * from reginfo where [email protected]" 
cmd.Parameters.AddWithValue("@name", TextBox1.Text) 
Dim dr As SqlDataReader 
con.Open() 
cmd.Connection = con 
dr = cmd.ExecuteReader() 

하는 것입니다. 항상 늦게 가능한 연결을 인스턴스화하고 가능한 한 빨리 종료하는 것이 좋습니다, 이런 방식으로 사용하여 블록

Using con = New SqlConnection(...connection string here....) 
    Using cmd = New SqlCommand("select * from reginfo where [email protected]", con) 
     con.Open() 
     cmd.Parameters.AddWithValue("@name", TextBox1.Text) 
     Using dr = cmd.ExecuteReader 
      '.... do you reading 
     End Using 
    End Using 

End Using 

내부의 더 나은 연결도 가능한 최소 시간 동안 계속 열려입니다 예외가있는 경우에는 적절히 처리하고 폐기하십시오.

+0

VB.NET에서는 여러 개의 사용을 쉼표로 하나의 선언으로 함께 결합 할 수 있습니다. 그렇지 않으면 각 using 문은 아마도 자신의 들여 쓰기 수준을 가져야합니다. – KyleMit

관련 문제