在asp.net中找不到我的查询错误
我在gridview的每一行都有一个gridview和链接按钮。当我单击其中一个按钮时,我会得到此行的courseName、courseCode和term列值。这是我的密码:在asp.net中找不到我的查询错误,asp.net,database,gridview,Asp.net,Database,Gridview,我在gridview的每一行都有一个gridview和链接按钮。当我单击其中一个按钮时,我会得到此行的courseName、courseCode和term列值。这是我的密码: int row = -1; int.TryParse(e.CommandArgument as string, out row); GridViewRow gdrow = instCourses.Rows[row]; // *** Get the underlying
int row = -1;
int.TryParse(e.CommandArgument as string, out row);
GridViewRow gdrow = instCourses.Rows[row];
// *** Get the underlying data item - in this case a DataRow
DataRow dr = ((DataTable)this.instCourses.DataSource).Rows[gdrow.DataItemIndex];
// *** Retrieve our context
string courseCode = dr["CourseCode"].ToString();
string courseNumber = dr["CourseNumber"].ToString();
string term = dr["Term"].ToString();
SqlConnection con = new SqlConnection();
con.ConnectionString = Userfunctions.GetConnectionString();
con.Open();
SqlCommand cmd=new SqlCommand("select RegisterTable.StudentID,StudentTable.Name,StudentTable.Surname from RegisterTable INNER JOIN StudentTable where RegisterTable.StudentID=StudentTable.StudentID and RegisterTable.CourseCode=@courseCode and RegisterTable.Term=@term and RegisterTable.CourseNumber=@courseNumber",con);
cmd.Parameters.AddWithValue("@courseCode", courseCode);
cmd.Parameters.AddWithValue("@courseNumber", courseNumber);
cmd.Parameters.AddWithValue("@term", term);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
studList.DataSource = dt;
studList.DataBind();
返回的值与我预期的一样,但我认为我的查询有问题,它在关键字“where”附近显示了不正确的语法。有人看到问题了吗
谢谢您有一个内部连接,没有外部连接
select RegisterTable.StudentID,StudentTable.Name,StudentTable.Surname from RegisterTable INNER JOIN StudentTable ON RegisterTable.studentid = StudentTable .id where RegisterTable.StudentID=StudentTable.StudentID and RegisterTable.CourseCode=@courseCode and RegisterTable.Term=@term and RegisterTable.CourseNumber=@courseNumber
你在这里缺少连接条件
FROM RegisterTable INNER JOIN StudentTable
您的内部连接应该如下所示
from RegisterTable INNER JOIN StudentTable
ON RegisterTable.StudentID = StudentTable.StudentId
根据where子句,可以不使用内部联接编写查询,只需使用笛卡尔积即可
select
RegisterTable.StudentID,
StudentTable.Name,
StudentTable.Surname
from RegisterTable, StudentTable
where RegisterTable.StudentID=StudentTable.StudentID and
RegisterTable.CourseCode=@courseCode and
RegisterTable.Term=@term and
RegisterTable.CourseNumber=@courseNumber
格式化sql查询,您将看到问题:
select RegisterTable.StudentID,StudentTable.Name,StudentTable.Surname
from RegisterTable INNER JOIN StudentTable
where RegisterTable.StudentID=StudentTable.StudentID
and RegisterTable.CourseCode=@courseCode
and RegisterTable.Term=@term
and RegisterTable.CourseNumber=@courseNumber
联接中没有关于子句的
from RegisterTable INNER JOIN StudentTable
ON RegisterTable.StudentID=StudentTable.StudentID
where ....
顺便说一下,在C#中,您可以使用逐字记录来格式化sql:
string sql = @"
SELECT registertable.studentid,
studenttable.name,
studenttable.surname
FROM registertable
INNER JOIN studenttable
ON registertable.studentid = studenttable.studentid
WHERE registertable.coursecode = @courseCode
AND registertable.term = @term
AND registertable.coursenumber = @courseNumber";
这样就更容易在sql查询中找到错误。查询语法不正确。尝试:
SELECT
RegisterTable.StudentID,
StudentTable.Name,
StudentTable.Surname
FROM RegisterTable
INNER JOIN StudentTable ON RegisterTable.StudentID = StudentTable.StudentID
WHERE
RegisterTable.CourseCode = @courseCode
AND RegisterTable.Term = @term
AND RegisterTable.CourseNumber = @courseNumber
您需要将WHERE
更改为ON
以完成连接
,然后您应该将其余条件移动到WHERE
子句。您需要使用ON
而不是WHERE
指定每个表中要连接的StudentTable
列:
SELECT RegisterTable.StudentID, StudentTable.Name, StudentTable.Surname
FROM RegisterTable
INNER JOIN StudentTable ON RegisterTable.StudentID = StudentTable.StudentID
WHERE RegisterTable.CourseCode = @courseCode
AND RegisterTable.Term = @term
AND RegisterTable.CourseNumber = @courseNumber
在那个SQL语句中,您只需要一个=
。谢谢,这是有效的。唯一有效的是student表中的列的名称是ID,而不是StudentID,当我修复它时,它是有效的,谢谢!