有没有办法获取 NpgsqlCommand 的完整命令文本?
Is there a way to get the full command text of an NpgsqlCommand?
使用这样的代码:
string strCommand = "SELECT * FROM \"MyDataBase\".\"vwUsers\" "
strCommand += "WHERE name LIKE '%' || :name || '%' ";
strCommand += "ORDER BY name ASC LIMIT :page_limit OFFSET :row_offset";
NpgsqlCommand cCommand = new NpgsqlCommand(strCommand);
cCommand.Parameters.Add(new NpgsqlParameter("name", NpgsqlDbType.Text));
cCommand.Parameters[0].Value = strName;
cCommand.Parameters.Add(new NpgsqlParameter("page_limit", NpgsqlDbType.Integer));
cCommand.Parameters[1].Value = nPageAmount;
cCommand.Parameters.Add(new NpgsqlParameter("row_offset", NpgsqlDbType.Integer));
cCommand.Parameters[2].Value = nRowOffset;
有没有办法获取插入所有参数的命令字符串的全文?
没有。这样做的原因是因为 Npgsql 3.0 参数不是简单地替换为字符串; Npgsql 实际上发送带有参数占位符的 SQL ,并在单独的消息和二进制编码中传输参数。换句话说,SQL 查询在任何地方都无法作为带有参数的文本使用。
(注意:在 Npgsql 2.2 中,客户端参数绑定是针对非准备消息完成的,所以这在理论上是可行的)。
试试这个 cCommand.CommandText
引用Npgsql.NpgsqlCommand
使用这样的代码:
string strCommand = "SELECT * FROM \"MyDataBase\".\"vwUsers\" "
strCommand += "WHERE name LIKE '%' || :name || '%' ";
strCommand += "ORDER BY name ASC LIMIT :page_limit OFFSET :row_offset";
NpgsqlCommand cCommand = new NpgsqlCommand(strCommand);
cCommand.Parameters.Add(new NpgsqlParameter("name", NpgsqlDbType.Text));
cCommand.Parameters[0].Value = strName;
cCommand.Parameters.Add(new NpgsqlParameter("page_limit", NpgsqlDbType.Integer));
cCommand.Parameters[1].Value = nPageAmount;
cCommand.Parameters.Add(new NpgsqlParameter("row_offset", NpgsqlDbType.Integer));
cCommand.Parameters[2].Value = nRowOffset;
有没有办法获取插入所有参数的命令字符串的全文?
没有。这样做的原因是因为 Npgsql 3.0 参数不是简单地替换为字符串; Npgsql 实际上发送带有参数占位符的 SQL ,并在单独的消息和二进制编码中传输参数。换句话说,SQL 查询在任何地方都无法作为带有参数的文本使用。
(注意:在 Npgsql 2.2 中,客户端参数绑定是针对非准备消息完成的,所以这在理论上是可行的)。
试试这个 cCommand.CommandText
引用Npgsql.NpgsqlCommand