因此,随着C#4.0中动态关键字的出现,我希望我能找到一个更好的解决方案来处理DataContext.ExecuteQuery选择任意列时返回的类型的问题.
在过去,我创建了一个新类型来保存此类查询的结果,或者使用此SO帖子中描述的方法.因此,既然我能够处理在.NET 4.0下运行的新项目,我就会研究使用动态类型以一种不太痛苦的方式完成同样的事情.
所以,我给了这个镜头:
var result = _db.ExecuteQuery<dynamic>( "SELECT CustomerID,City FROM Customers", new object[0] );
foreach( var d in result )
{
MessageBox.Show( String.Format( "{0}, {1}", d.CustomerID, d.City ) );
}
Run Code Online (Sandbox Code Playgroud)
在运行时抛出异常,因为动态对象的属性CustomerID不存在.所以,由于我在这一点上对动态关键字的体验是零(文章/博客文章或两篇,没有真正的经验)我希望有人在这里可以告诉我,如果我想在这里做的甚至是可能的.我可能高估了ExecuteQuery背后的"魔法"数量,但我认为这可能是由于在幕后完成的属性映射.任何帮助深表感谢.
setAutoCommit为 false 并在关闭连接之前抛出异常,但仍然提交事务。这不是很奇怪的行为吗?
public static void insertEmployee(){
String query1 = "INSERT INTO EMPLOYEE VALUES(80, 'from code')";
String query2 = "INSERT INTO EMPLOYEE VALUES(81, 'from code')";
Connection connection = null;
Statement statement = null;
try {
connection = DriverManager.getConnection(url, username, password);
connection.setAutoCommit(false);
statement = connection.createStatement();
statement.executeUpdate(query1);
ResultSet resultSet = statement.executeQuery(query2);
while(resultSet.next()) //this code throws the exception kept like this intentionally
{
int empNo = resultSet.getInt("EMPLOYEE_ID");
String eName = resultSet.getString("EMPLOYEE_NAME");
System.out.println("eName = " + eName);
}
} catch (SQLException e) { …Run Code Online (Sandbox Code Playgroud) 使用 JDBC 4 访问Java 11 中的H2数据库时,通过预准备语句运行简单查询会失败。
\n\n运行此行时:
\n\ntry ( ResultSet rs = pstmt.executeQuery( sql ) ; ) {\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6我收到此错误:
\n\n\n\n\norg.h2.jdbc.JdbcSQLException:准备好的语句不允许使用此方法;请改用常规语句。[90130-197]
\n
我尝试使用H2 Error Analyzer,但没有帮助。
\n\n这是一个完整的示例应用程序,位于单个 .java 文件中。您可以复制粘贴并自行运行。
\n\npackage com.basilbourque.example.work.basil.example.h2.pstmt_query;\n\nimport org.h2.jdbcx.JdbcDataSource;\n\nimport java.sql.*;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.UUID;\n\npublic class App {\n public static void main ( String[] args ) {\n App app = new App();\n app.doIt();\n }\n\n private void doIt ( ) {\n\n // Create database.\n try {\n Class.forName( "org.h2.Driver" );\n } catch …Run Code Online (Sandbox Code Playgroud) 我有以下声明:
someList = dc.ExecuteQuery<MyCustomType>(@"Select Id As ProductId, Name From ivProduct").ToList();
Run Code Online (Sandbox Code Playgroud)
当我的MyCustomType的Id属性为INT时,数据库中的Id存储为int32.有没有办法在选择期间将int32强制转换为int?
谢谢
我在存储过程中编写了这个SQL但没有工作,
declare @tableName varchar(max) = 'TblTest'
declare @col1Name varchar(max) = 'VALUE1'
declare @col2Name varchar(max) = 'VALUE2'
declare @value1 varchar(max)
declare @value2 varchar(200)
execute('Select TOP 1 @value1='+@col1Name+', @value2='+@col2Name+' From '+ @tableName +' Where ID = 61')
select @value1
execute('Select TOP 1 @value1=VALUE1, @value2=VALUE2 From TblTest Where ID = 61')
Run Code Online (Sandbox Code Playgroud)
此SQL抛出此错误:
必须声明标量变量"@ value1".
我正在动态生成SQL,我想在变量中获取值.我该怎么办?
我继承了......好吧,我想我可以称之为#### Struts应用程序,我的任务是优化Levey-Jennings流程,检查我们的质量控制标准是否符合要求.
这个过程本身运行良好,但即使数据集较小,性能时间也一直存在巨大的增长.我测试了算法的每个部分之间的时间,发现大时间的猪是Java的executeQuery()方法.
最近我运行应用程序并将执行时间记录为10秒.executeQuery()自己花了六秒钟.很想知道问题是什么,我把查询带到TOAD并逐字运行 - 它只需要1秒钟就可以运行.
我运行了一个更大的数据集,在Levey-Jennings应用程序中运行了60秒 - 然而,在TOAD中,需要10秒.
这是查询的问题,还是使用executeQuery()通常是极端减速的前兆?
executequery ×6
c# ×2
java ×2
autocommit ×1
casting ×1
dynamic ×1
exception ×1
h2 ×1
jdbc ×1
linq ×1
linq-to-sql ×1
oracle ×1
select ×1
sql ×1
sql-server ×1
struts-1 ×1
t-sql ×1