0

我正在使用 sqlDataReader 获取数据并将其设置为会话变量。问题是它不想使用表达式。我可以引用表中的任何其他列,但不能引用表达式。SQL 确实有效。代码如下。在此先感谢,安东尼

Using myConnectionCheck As New SqlConnection(myConnectionString)
    Dim myCommandCheck As New SqlCommand()
    myCommandCheck.Connection = myConnectionCheck
    myCommandCheck.CommandText = "SELECT Projects.Pro_Ver, Projects.Pro_Name, Projects.TL_Num, Projects.LP_Num, Projects.Dev_Num, Projects.Val_Num, Projects.Completed, Flow.Initiate_Date, Flow.Requirements, Flow.Req_Date, Flow.Dev_Review, Flow.Dev_Review_Date, Flow.Interface, Flow.Interface_Date, Flow.Approval, Flow.Approval_Date, Flow.Test_Plan, Flow.Test_Plan_Date, Flow.Dev_Start, Flow.Dev_Start_Date, Flow.Val_Start, Flow.Val_Start_Date, Flow.Val_Complete, Flow.Val_Complete_Date, Flow.Stage_Production, Flow.Stage_Production_Date, Flow.MKS, Flow.MKS_Date, Flow.DIET, Flow.DIET_Date, Flow.Closed, Flow.Closed_Date, Flow.Dev_End, Flow.Dev_End_Date, Users_1.Email AS Expr1, Users_2.Email AS Expr2, Users_3.Email AS Expr3, Users_4.Email AS Expr4, Users_4.FNAME, Users_3.FNAME AS Expr5, Users_2.FNAME AS Expr6, Users_1.FNAME AS Expr7 FROM Projects INNER JOIN Users AS Users_1 ON Projects.TL_Num = Users_1.PIN INNER JOIN Users AS Users_2 ON Projects.LP_Num = Users_2.PIN INNER JOIN Users AS Users_3 ON Projects.Dev_Num = Users_3.PIN INNER JOIN Users AS Users_4 ON Projects.Val_Num = Users_4.PIN INNER JOIN Flow ON Projects.id = Flow.Flow_Pro_Num WHERE id = "
    myCommandCheck.CommandText += QSid
    myConnectionCheck.Open()
    myCommandCheck.ExecuteNonQuery()
    Dim count As Int16 = myCommandCheck.ExecuteScalar
    If count = 1 Then
        Dim myDataReader As SqlDataReader
        myDataReader = myCommandCheck.ExecuteReader()
        While myDataReader.Read()
            Session("TL_email") = myDataReader("Expr1").ToString()
            Session("PE_email") = myDataReader("Expr2").ToString()
            Session("DEV_email") = myDataReader("Expr3").ToString()
            Session("VAL_email") = myDataReader("Expr4").ToString()
            Session("Project_Name") = myDataReader("Pro_Name").ToString()
        End While
        myDataReader.Close()
    End If
End Using
4

3 回答 3

0

有几件事:

1)您正在执行查询 3 次。您可能会丢失 ExecuteNonQuery 和 ExecuteScalar 调用,并将 while 循环替换为“if myDataReader.Read() / end if”以获取第一个结果记录的数据值。如果没有找到记录,则不会设置会话变量,就像在您当前的代码中一样。

2)它看起来更像是你的会话管理问题(即会话中获取值)而不是你的 sql 查询,这对我来说看起来不错。

查看:

  • 您在 web.config 文件中启用了 sessionState,
  • 您不会在任何地方重置 Session 值,并且
  • 您在尝试发送电子邮件时要求相同的会话字段名称。(例如,您是否设置 Session("DEV_Email") 但要求 Session("DEV Email") (空格而不是下划线)?
于 2010-05-14T16:49:04.590 回答
0

对不起大家。代码工作得很好。sqlDataReader 将接受表达式作为列名。

我收到错误消息的原因是 from 和 to 参数的值不能为空。对于我表中的任何记录,该列中都没有数据。

于 2010-05-14T18:22:34.913 回答
0

这可能是因为列名需要是唯一的,SqlDataReader 才能使用列的字符串名称对它们进行索引。

于 2010-05-14T15:34:35.657 回答