SQL 加入会话

本文关键字:会话 SQL | 更新日期: 2023-09-27 17:56:35

我有一个使用 asp.net 和C#的网站来存储Session["ID"]

我有两个不同的表,如下所示:

身份证酒吧标识

酒吧酒吧标识名字法典

我想要一个 SQL 命令,从会话具有相同 ID 的 Bar 表中选择名称和代码。

我尝试过的代码是这样的:

OleDbConnection conn;
conn = new OleDbConnection(.....);
OleDbCommand comm;
OleDbDataReader reader;
comm = new OleDbCommand("SELECT Bar.Name, Bar.Code, Foo.ID FROM Bar JOIN Foo ON Foo.BarID = Bar.BarID WHERE Foo.ID = @ID", conn);
comm.Parameters.Add("@ID", OleDbType.Integer);
comm.Parameters["@ID"].Value = Session["ID"].ToString();
conn.Open();
reader = comm.ExecuteReader();

我已经更新了答案,但我仍然遇到同样的问题。这是因为我正在用reader = comm.ExecuteReader();检查语句吗?有没有更好的方法?

我得到的错误是:

FROM 子句中的语法错误。

说明:执行当前 Web 请求期间发生未经处理的异常。请查看堆栈跟踪,了解有关错误及其在代码中起源位置的详细信息。

异常详细信息:System.Data.OleDb.OleDbException:FROM 子句中的语法错误。

SQL 加入会话

Fo 某些原因您对JOINWHERE条款的条件合并了。这是正确的版本:

SELECT Bar.Name, Bar.Code, Foo.ID
FROM Bar
JOIN Foo ON Foo.BarID = Bar.BarID
WHERE Foo.ID = @ID
"SELECT Bar.Name, Bar.Code, Foo.ID FROM Bar JOIN Bar ON Foo.ID = @ID"

应该是

"SELECT Bar.Name, Bar.Code, Foo.ID FROM Bar JOIN Foo ON Foo.BarID = Bar.BarID WHERE Foo.Id = @ID"

您从"酒吧"中选择,然后加入"酒吧"。你真的想加入Foo。

对于您的编辑:

comm.Parameters.Add("@ID", OleDbType.Integer);
comm.Parameters["@ID"].Value = (int) Session["ID"];

该参数需要一个整数,但您给它一个字符串。