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 子句中的语法错误。
Fo 某些原因您对JOIN
和WHERE
条款的条件合并了。这是正确的版本:
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"];
该参数需要一个整数,但您给它一个字符串。