- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有时我需要查看 SubSonic 生成的 SQL 语句。
适用于:
SqlQuery qry = DB.Select().From<Product>()
.Where(Products.Columns.Name).IsEqualTo("Productname");
Console.WriteLine(qry.BuildSqlStatement());
然而,这会返回带参数的查询 (SELECT ... WHERE productname = ?productname
)。因此,我总是必须在我的代码中找到真正的值,并将参数替换为格式正确的值(例如 productname = 'Productname'),这对于复杂的查询来说真的很烦人。
所以,我决定做一个我想分享的扩展方法(看看我对代码的回答)。
最佳答案
它离完美还很远,但它符合我现在的需求。
但是我可以用
Console.WriteLine(qry.BuildSqlStatementDebug());
然后将结果复制到剪贴板并从查询浏览器再次运行我的数据库。
using System;
using SubSonic;
namespace MyNamespace.ExtensionMethods
{
public static class SubsonicSqlQueryExtensionMethods
{
public static String BuildSqlStatementDebug(this SqlQuery qry)
{
var result = qry.BuildSqlStatement();
foreach (var c in qry.Constraints)
{
if (c.Comparison == Comparison.BetweenAnd)
{
result = result.Replace(c.ParameterName + "_start", GetFormattedValue(c.StartValue, c.DbType));
result = result.Replace(c.ParameterName + "_end", GetFormattedValue(c.EndValue, c.DbType));
}
else
{
result = result.Replace(c.ParameterName, GetFormattedValue(c.ParameterValue, c.DbType));
}
}
return result;
}
// Works for MySQL
private static readonly String formatter_date = "'{0:yyyy-MM-dd}'";
private static readonly String formatter_datetime = "'{0:yyyy-MM-dd hh:mm:ss}'";
private static readonly String formatter_string = "'{0}'";
private static String GetFormattedValue(Object value, System.Data.DbType type)
{
switch (type)
{
case System.Data.DbType.AnsiString:
return String.Format(formatter_string, value);
case System.Data.DbType.AnsiStringFixedLength:
return String.Format(formatter_string, value);
//case System.Data.DbType.Binary:
// break;
case System.Data.DbType.Boolean:
return (Boolean)value == true ? "true" : "false";
//case System.Data.DbType.Byte:
// break;
//case System.Data.DbType.Currency:
// break;
case System.Data.DbType.Date:
return String.Format(formatter_date, value); break;
case System.Data.DbType.DateTime:
return String.Format(formatter_datetime, value); break;
case System.Data.DbType.DateTime2:
return String.Format(formatter_datetime, value); break;
//case System.Data.DbType.DateTimeOffset:
// break;
//case System.Data.DbType.Decimal:
// break;
//case System.Data.DbType.Double:
// break;
case System.Data.DbType.Guid:
return String.Format(formatter_string, value);
//case System.Data.DbType.Int16:
// break;
//case System.Data.DbType.Int32:
// break;
//case System.Data.DbType.Int64:
// break;
//case System.Data.DbType.Object:
// break;
//case System.Data.DbType.SByte:
// break;
//case System.Data.DbType.Single:
// break;
case System.Data.DbType.String:
return String.Format(formatter_string, value);
case System.Data.DbType.StringFixedLength:
return String.Format(formatter_string, value);
//case System.Data.DbType.Time:
// break;
//case System.Data.DbType.UInt16:
// break;
//case System.Data.DbType.UInt32:
// break;
//case System.Data.DbType.UInt64:
// break;
//case System.Data.DbType.VarNumeric:
// break;
case System.Data.DbType.Xml:
return String.Format(formatter_string, value);
default:
return value.ToString();
}
}
}
}
关于c# - 将 SubSonic SqlQuery 对象转换为纯 SQL 的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980077/
我有一个 SQL Server 函数,它返回一个标量 BIT 值并采用一个参数。下面给你一个想法: CREATE FUNCTION dbo.[fnTest] (@StringToTest VARCHA
我知道这个问题看起来很主观,但它真的很简单。作为 SubSonic 的长期用户和兼职贡献者,我对社区认为改进它的最佳方法很感兴趣。 那么你有什么看法,你会如何让 SubSonic 变得更好?哪一件事会
编辑:现在有一个 doc page在这一点上,这个问题是无关紧要的,也已经过时了。阅读文档而不是这个问题。 我已经玩了一个月左右的 SubSonic 3 代码生成,我很想从其他人那里得到一些关于他们使
我正在试用新的 SubSonic 3 预览版,但我不确定我应该在我的 MVC 项目中用于基本 CRUD 操作的模式。 我试图在我的模型中保留尽可能多的数据逻辑,所以我向每个模型的部分类添加了一些静态
我一直在探索 Sub Sonic 3 的 SimpleRepository 并且对它非常满意,但对交易有疑问。我知道使用像“AddMany”和“DeleteMany”这样的方法将在单个事务中自动执行所
我正在使用 Subsonic 的 SimpleRepository,我正在尝试编写一些单元测试,这样它们就不会触及数据库,但我无法弄清楚 SimpleRepository 是否可以针对内存列表工作(比
有人在 Mono 上部署过 SubSonic 吗? 最佳答案 可能是用户 - 在问题的混合中,有人说他在单声道下运行它以及您需要采取的步骤 http://forums.subsonicproject.
我想添加基本日志记录并对 SubSonic 2.1 生成的类进行一些其他细微更改(我没有使用 SubSonic 3.0 t4 模板)。 有没有办法在不修改 SubSonic 源代码的情况下做到这一点?
我一直在使用 SubSonic.Query,直到有一天我不能通过添加 WHERE 来做“IS NULL”,然后我意识到 SubSonic.SqlQuery 存在并且它有一个函数“IsNull()” ”
最新版本的 Subsonic 是否与 Visual Studio 2010/.Net 4.0 兼容? 最佳答案 我已经在 Visual Studio 2010 和 .net 4 的测试版中使用了版本
有什么方法可以在 SubSonic 3.0 中访问我的 SQL View ?代码生成似乎完全跳过了 View 最佳答案 在项目中包含 View 只需打开 SQLServer.ttinclude 查找加
我想在我的项目中使用 subsonic 3.0 SimpleRepository,但是有一个问题: 如果我的表名像 产品 等然后我无法从数据库中获取任何数据, 因为 subsonic 会生成像“Sel
保存记录后如何立即获取记录 ID(主键)?我有自动生成的 ID 列。在保存该对象之前,我需要将 ID 作为“外键”传递给另一个对象。 目前我这样做 Product.Save() 我不能吗 int id
最新版本的 Subsonic 是否与 Visual Studio 2010/.Net 4.0 兼容? 最佳答案 是的,Subsonic 3 在 .NET 4 中应该可以正常工作。我正在使用 Subso
我正在使用 SubSonic 2.2 和 sqlite,在处理具有非 AUTOINCREMENT 的 INTEGER PRIMARY KEY 列的表时遇到了问题。根据faq : If you decl
我已经使用 SS2.1 有一段时间了,并且非常喜欢它。然而,我注意到 2.2 已经发布了,所以我认为最好升级。将 2.2 放入我的 bin 文件夹后,它不再从 MySQL 构建与 v2.1 完美配合的
我们有某些表,其中有多个列共同构成主键。 当 SubSonic 为具有多列的表生成所有它的类时,仍有一些方法,如 FetchByID,只使用一个值作为主键。 因此,外键属性将返回错误的项目。例如,我们
我有一个名为“用户”的表,它有一个名为“已删除”的列,一个 bool 值表示用户已从系统中“删除”(当然,没有实际删除它)。 我也有很多表对 Users.user_id 列有 FK。 Subsonic
我对使用 SubSonic 真的很感兴趣,我已经下载了它,到目前为止我很享受,但是查看 github 和 googlegroups 上的事件,它似乎不是很活跃,看起来很像一个正在消亡的项目. tekp
我的网站正在使用 Subsonic 2.2。 我遇到了一种奇怪的情况,我需要运行一些临时 SQL 语句。 public IList GetDistincList(string TableName, s
我是一名优秀的程序员,十分优秀!