ASP.NET SqlDataReader没有读取值! [英] ASP.NET SqlDataReader not reading value !

查看:83
本文介绍了ASP.NET SqlDataReader没有读取值!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





有谁能告诉我为什么datareader没有从这段代码读取user_id?



我调试了,user_id_select仍为0,我没有错误。



Hi,

Can anyone tell me why datareader is no reading user_id from this code?

I debugged and the user_id_select remains 0 and I am getting no errors.

Protected Sub btnAddUser_Click(sender As Object, e As EventArgs) Handles btnAddUser.Click

        Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True")
        Dim searchComm As String = "SELECT user_id FROM users WHERE username=@username"
        Dim user_id_select As New Integer

        Dim searchSQL As New SqlCommand

        conn.Open()

        searchSQL = New SqlCommand(searchComm, conn)
        searchSQL.Parameters.AddWithValue("@username", txtUserSearch.Text.ToString)

        Dim datareader As SqlDataReader = searchSQL.ExecuteReader()

        datareader.Read()

        While datareader.Read

            user_id_select = datareader("user_id")

        End While


        datareader.Close()
        conn.Close()

        Dim addComm As String = "INSERT user_id, project_id INTO user_project VALUES (@UserID,@ProjectID)"

        Dim addSQL As New SqlCommand

        conn.Open()

        addSQL = New SqlCommand(addComm, conn)

        addSQL.Parameters.AddWithValue("@UserID", Convert.ToInt32(user_id_select))
        addSQL.Parameters.AddWithValue("@ProjectID", Convert.ToInt32(Session("project_id")))

        Dim datareader2 As SqlDataReader = searchSQL.ExecuteReader()




        datareader.Close()
        conn.Close()




    End Sub

推荐答案

这是因为你已经从读者那里读取价值了code datareader.Read()

ie

it is because u r already reading value from reader remove this line from code datareader.Read()
i.e
Protected Sub btnAddUser_Click(sender As Object, e As EventArgs) Handles btnAddUser.Click

           Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True")
           Dim searchComm As String = "SELECT user_id FROM users WHERE username=@username"
           Dim user_id_select As New Integer

           Dim searchSQL As New SqlCommand

           conn.Open()

           searchSQL = New SqlCommand(searchComm, conn)
           searchSQL.Parameters.AddWithValue("@username", txtUserSearch.Text.ToString)

           Dim datareader As SqlDataReader = searchSQL.ExecuteReader()

           //datareader.Read()

           While datareader.Read

               user_id_select = datareader("user_id")

           End While


           datareader.Close()
           conn.Close()

           Dim addComm As String = "INSERT user_id, project_id INTO user_project VALUES (@UserID,@ProjectID)"

           Dim addSQL As New SqlCommand

           conn.Open()

           addSQL = New SqlCommand(addComm, conn)

           addSQL.Parameters.AddWithValue("@UserID", Convert.ToInt32(user_id_select))
           addSQL.Parameters.AddWithValue("@ProjectID", Convert.ToInt32(Session("project_id")))

           Dim datareader2 As SqlDataReader = searchSQL.ExecuteReader()




           datareader.Close()
           conn.Close()




       End Sub


您在DataReader上调用了两次.Read()。所以它已经发展得太远。



因为你只想要一个用户记录尝试这样的事情



You called .Read() twice on the DataReader. So it has advanced too far.

Since you are only expecting one user record try something like this instead

If datareader.HasRows THEN
  datareader.Read()
  user_id_select = datareader("user_id")
End If


Brackets,我的朋友,括号。

更改:

Brackets, my friend, brackets.
Change:
searchSQL.Parameters.AddWithValue("@username", txtUserSearch.Text.ToString)

To:

To:

searchSQL.Parameters.AddWithValue("@username", txtUserSearch.Text.ToString())

但实际上你根本不需要ToString,因为文本道具erty已经是一个字符串,所以请改用它:

But in fact you don''t need the ToString at all, since a Text property is a string already, so use this instead:

searchSQL.Parameters.AddWithValue("@username", txtUserSearch.Text)


这篇关于ASP.NET SqlDataReader没有读取值!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆