如果您对如何获取由.Net感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于如何获取由.Net的详细内容,我们还将为您解答VB或C#中的参数化查询实际执行的SQL?的相关问题,
如果您对如何获取由.Net感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于如何获取由.Net的详细内容,我们还将为您解答VB或C#中的参数化查询实际执行的SQL?的相关问题,并且为您提供关于.net – 我可以在不实际执行的情况下测试LINQ查询的构造、ACCESS的参数化查询,附VBSCRIPT(ASP)和C#(ASP.NET)函数、ACCESS的参数化查询,附VBSCRIPT(ASP)和C#(ASP.NET)函数第1/2页、ArcGIS JavaScript API 中的参数化查询的有价值信息。
本文目录一览:- 如何获取由.Net(VB或C#)中的参数化查询实际执行的SQL?
- .net – 我可以在不实际执行的情况下测试LINQ查询的构造
- ACCESS的参数化查询,附VBSCRIPT(ASP)和C#(ASP.NET)函数
- ACCESS的参数化查询,附VBSCRIPT(ASP)和C#(ASP.NET)函数第1/2页
- ArcGIS JavaScript API 中的参数化查询
如何获取由.Net(VB或C#)中的参数化查询实际执行的SQL?
是否有直接方法查看DbCommand
对象实际对基础数据库实际执行的SQL命令文本(即,在将参数处理为语句之后)?
详细信息在这里:我正在使用VB.Net
3.5,并具有一个工厂对象(DbProviderFactory
)和一个连接(System.Data.IDbConnection
)。我正在使用工厂使用该DbProviderFactory.CreateCommand()
方法创建新的命令对象,然后将参数化查询分配给CommandText
命令的属性。稍后,我创建一些参数并将其与查询关联(使用来创建DbProviderFactory
)。
很好,但是我想看看命令对象生成的实际SQL语句。我目前正在针对SQLite数据库进行测试,但想知道是否有一种通用的方法行得通。
答案1
小编典典服务器执行的实际SQL就是您编写的。参数是与命令本身分开发送的,因此实际上从不将其替换为SQL命令中的值。
.net – 我可以在不实际执行的情况下测试LINQ查询的构造
为什么我们不能在没有实际执行的情况下对查询的构造进行单元测试?我原本以为你可以将你的IQueryable以某种方式附加到LINQ to Entities提供程序并确认sql是否正确生成(使用ToTraceString这样不执行实际查询的东西).
我想象沿着这些行的代码(这个查询在L2O中运行良好但在L2E中运行不正常):
<test()> _ Public Sub Query_Should_Build_Against_L2E() Dim testQuery = From d In myDb Where d.Status = CType(Status.Ready,Integer) testQuery.SetQueryProvider("L2E") Assert.DoesNotthrow(testQuery.ToTraceString()) End Sub
编辑
我尝试实现GertArnold的解决方案如下:
Dim context As New Context("Data Source=fakedbserver;Initial Catalog=fakedb;Persist Security Info=True;") Dim result = context.myTable.Where(Function(d) d.Status=True)
抛出ProviderIncompatibleException,并显示消息“从数据库获取提供程序信息时发生错误.这可能是由于实体框架使用不正确的连接字符串引起的.检查内部异常以获取详细信息并确保连接字符串正确.”这是完整的异常链:
System.Data.ProviderIncompatibleException : An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct.
System.Data.ProviderIncompatibleException : The provider did not return a ProviderManifestToken string.
system.invalidOperationException : This operation requires a connection to the ‘master’ database. Unable to create a connection to the ‘master’ database because the original database connection has been opened and credentials have been removed from the connection string. Supply an unopened connection.
System.Data.sqlClient.sqlException : A network-related or instance-specific error occurred while establishing a connection to sql Server. The server was not found or was not accessible. Verify that the instance name is correct and that sql Server is configured to allow remote connections. (provider: Named Pipes Provider,error: 40 – Could not open a connection to sql Server)
解决方法
attach your IQueryable to the LINQ to Entities provider
问题是:哪个IQueryable?接口本身就没有了.使用EF,你正在处理实现IQueryable的类,但除此之外还要做更多.事实上,他们完全有能力与已经连接在引擎盖下的上下文和查询提供程序合作. IQueryable.IQueryProvider是一个只读属性,因此它由工厂设置,用于创建特定的IQueryable实现.
因此,您的testQuery将是一个ObjectQuery,因为它取自myDb,它不能是EF上下文.
Why can’t we unit test the construction of the query without actually executing it?
这不是你的实际问题吗?事实上,我甚至想知道你是否想要一个不同的查询提供者.我想你会希望EF查询提供程序这样做,否则仍然不能保证与EF一样工作.
无论如何,你可以在它的连接字符串中创建一个带有假数据库名称的上下文(以确保它不连接),并检查((ObjectQuery)testQuery).ToTraceString()的有效性.只要你不迭代testQuery就没关系.我可以想象,当在复杂的执行路径中组合查询时,这种测试有一些价值. (但我宁愿避免这种情况).
ACCESS的参数化查询,附VBSCRIPT(ASP)和C#(ASP.NET)函数
最近因项目需要用ACCESS做数据库开发WEB项目看论坛上还许多人问及ACCESS被注入的安全问题
许多人解决的方法仍然是用Replace替换特殊字符,然而这样做也并没有起到太大做用
今天我就把我用ACCESS参数化查询的一些方法和经验和大家分享
希望对大家有所启发,有写的不对的地方希望高手们多多指教
ASP.NET 用OleDbCommand的new OleDbParameter创建参数货查询
ASP用Command的CreateParameter 方法创建参数化查询
(sql储存过程查询也是用这个方法建立的)
ASP.NET C#语法
----------------------------------------------------------------------------
OleDbParameter parm = new OleDbParameter(Name, Type, Direction, Size, Value);
(实际上它有七重载大家具体大家可以在VS.net里面就可以看到)
参数
Name 可选,字符串,代表 Parameter 对象名称。
Type 可选,长整型值,指定 Parameter 对象数据类型。
Direction 可选,长整型值,指定 Parameter 对象类型。。
Size 可选,长整型值,指定参数值最大长度(以字符或字节数为单位)。
Value 可选,变体型,指定 Parameter 对象的值。
以下是实例,查询news表中所有tsing发表的新闻
-------------------------------------------------------
sql="select * from newss where username=? order by id"
//注意查询的条件均用?号表示
OleDbConnection conn = new OleDbConnection(connString);
OleDbCommand cmd = new OleDbCommand(sql,conn);
OleDbParameter parm = new OleDbParameter("temp",OleDbType.VarChar, 50);
//temp为Parameter对象可随便定义,OleDbType.VarChar指定为字符串,长度50
parm.Direction = ParameterDirection.Input;
//指定其类型输入参数
cmd.Parameters.Add(parm);
cmd.Parameters["temp"].Value = "tsing";
//查询tsing,也可以写成cmd.Parameters[0]
conn.open();
cmd.ExecuteReader();
----------------------------------------------------------------------------
ASP VBSCRIPT语法
----------------------------------------------------------------------------
Set parameter = command.CreateParameter (Name, Value)
参数同上
以下是实例,查询news表中所有tsing发表的新闻
------------------------------------------------------
et conn = Server.CreateObject("Adodb.Connection")
conn.ConnectionString = connString
conn.open()
set mycmd = Server.CreateObject("ADODB.Command")
mycmd.ActiveConnection=conn
mycmd.CommandText=sql
mycmd.Prepared = true
set mypar = mycmd.CreateParameter("temp",129,1,50,"tsing")
mycmd.Parameters.Append mypar
set myrs = mycmd.Execute