TLDR:
以下代码在不同的数据库Oracle:
select sysdate from dualSQLite中运行select datetime('now')在
Session.CreateSQLQuery(cmd).UniqueResult<DateTime>()对Oracle 进行操作时,结果是一个DateTime,而在对SQLite进行操作时是一个字符串.感觉就像SQLite驱动程序中的一个错误,以及检查返回类型的hack,如果它是一个字符串,则执行DateTime.Parse().我可以这样做,但是有没有办法让NHibernate返回正确的类型?
我试图从数据库中获取当前数据库时间.它在使用Oracle时工作正常,但是当我尝试对SQLite(在我的单元测试中)时,它会因为返回的日期不是DateTime而是字符串而中断.
我见过使用自定义IUserType的解决方案,但在这种情况下我无法看到我应该如何使用它.有什么建议?
using System;
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using NHibernate.Dialect.Function;
namespace My.Common.Types {
public class MyNHibernateDialectException : Exception {
public MyNHibernateDialectException(string message) : base(message) { }
}
/// <summary>
/// Define all custom functions here by name. It is important that when adding a new custom sql function, that function will work
/// in all dialects supported.
/// </summary>
public static class MyDatabaseDialects { …Run Code Online (Sandbox Code Playgroud) 我有一个Date列,实际上不是日期格式.日期如下:25/10/2012.现在我必须比较2个日期,但我找不到这样做的模式,因为格式错误.
我试过的是:
SELECT *
from PARAMETER
where NAME like 'Date_To' and SUBSTR(VALUE, 1, 2)<'25'
and SUBSTR(VALUE, 1, 2)>'05'
Run Code Online (Sandbox Code Playgroud)
我面临的问题是这一部分:SUBSTR(PA_VALUE, 1, 2)>'05'不起作用,因为数字前面有0(零).有什么解决方案吗?
因此,我正在尝试使用nhibernate调用保存图像的存储过程。我的问题是查询失败,并显示以下错误:
byte []值的长度超过在映射/参数中配置的长度。
这是我将参数附加到的地方ISQLQuery。参数为Dictionary<string, object>。
public void Execute()
{
string sql = BuildSprocDefinition();
var query = Session.CreateSQLQuery(sql);
foreach (var parameter in Parameters)
{
if (parameter.Value is int)
query.SetParameter<int>(parameter.Key, (int)parameter.Value);
else if (parameter.Value is long)
query.SetParameter<long>(parameter.Key, (long)parameter.Value);
else if (parameter.Value is bool)
query.SetParameter<bool>(parameter.Key, (bool)parameter.Value);
else if (parameter.Value is byte[])
query.SetBinary(parameter.Key, (byte[])parameter.Value);
else
query.SetParameter(parameter.Key, parameter.Value);
}
using (var tx = Session.BeginTransaction())
{
query.ExecuteUpdate();
Session.Flush();
tx.Commit();
}
}
protected string BuildSprocDefinition()
{
StringBuilder sql = new StringBuilder(String.Format("exec {0} ", …Run Code Online (Sandbox Code Playgroud) 所以,我正在尝试使用 isql 执行存储在 shell 脚本变量中的 SQL 语句
附上通用代码。
SQL="select * from Student"
EMPLOYEES=`isql -U $USERNAME -P $PASSWORD -D $DATABASE -S $SERVER<<EOF
$SQL
go
Run Code Online (Sandbox Code Playgroud)
但是,在执行此操作时,我收到一个错误,例如:关键字“Select”附近的语法不正确和“=”附近的 suntax 不正确
任何人都知道如何执行直接存储在 isql 变量中的 SQL 查询?