我有一个包含所有SQL对象的类,包括建立数据库连接和执行查询的方法。
在另一个类中,我创建了一个“数据库”对象的实例,并执行一个查询来设置我希望在该连接的其余查询中保持设置的变量的值:
DECLARE @InstitutionId NVARCHAR(MAX);
SET @InstitutionId ='15';
执行上述操作后,使用相同的连接,然后执行另一个将使用该变量的查询,但是我收到一条错误,指出必须设置InstituionId。
所以看来,一旦我执行了第二个查询,第一个查询的结果就会丢失。无论如何我可以拥有上面的持久性,或者我必须在每次执行的查询中包含Declare和Set命令吗?当我在Microsoft SQL Server Management Studio中执行此操作时,我只需要运行一次,它就会在我的查询窗口中查找所有查询,这就是为什么我认为(天真地)结果会坚持下去。
谢谢,
杰森
答案 0 :(得分:1)
没有将它存储在数据库中,你不能。该语句包含状态,而不是数据库连接。一旦它超出范围,你什么都没有。想象一下在声明的最后一个'go'命令,它本质上是等价的。
答案 1 :(得分:0)
不,查询的范围仅在查询期间有效。例如,请记住,大多数SQL连接驱动程序将重用连接池中的连接,因此不可能(对于SQL和您的应用程序)跟踪来自先前上下文的查询。
根据您的应用的具体要求,我会将 InstitutionId 添加为数据库类的成员/属性。然后,数据库类负责将该成员的值作为查询参数发送到每个请求:
例如。
command.Parameters.AddWithValue("@InstitutionId",this.InstitutionId);