在Powershell v3.0中,我想从HTTP GET返回响应代码,例如200 OK或500 Internal Server Error.(这是为了进行黑客部署,对已部署的站点进行快速预热并查看它是否有效,这是一种小型验收测试.状态代码确实是我想要的.)
违背我的意愿,HttpWebRequest.GetResponse收到错误时会抛出错误500 Internal Server Error.这很烦人,因为在我的用例中它对我来说并不是一个错误.无论如何,我认为我可以捕获异常并仍然剥离底层响应代码,但我遇到了麻烦.
这是一些几乎可以工作的代码:
function WebResponseStatusCode (
[Parameter(Mandatory=$true)][string] $url
) {
$req = [system.Net.HttpWebRequest]::Create($url)
try {
$res = $req.GetResponse();
$statuscode = $res.statuscode;
}
catch [System.Net.WebException] {
#the outer error is a System.Management.Automation.ErrorRecord
Write-Host "error!"
return = $_.Response.statuscode; #nope
}
finally {
if (!($res -eq $null)) {
$res.Close();
}
}
return $statuscode;
}
Run Code Online (Sandbox Code Playgroud)
问题当然是$_没有Response财产.也不是$_.InnerException,即使是演员:
return [System.Net.WebException]($_.InnerException)
Run Code Online (Sandbox Code Playgroud)
我玩过$_ | …
考虑排序的数组a:
a = np.array([0, 2, 3, 4, 5, 10, 11, 11, 14, 19, 20, 20])
Run Code Online (Sandbox Code Playgroud)
如果我指定了左右三角形,
delta_left, delta_right = 1, 1
Run Code Online (Sandbox Code Playgroud)
那么这就是我期望分配集群的方式:
# a = [ 0 . 2 3 4 5 . . . . 10 11 . . 14 . . . . 19 20
# 11 20
#
# [10--|-12] [19--|-21]
# [1--|--3] [10--|-12] [19--|-21]
# [-1--|--1] [3--|--5] [9--|-11] [18--|-20]
# +--+--|--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
# [2--|--4] [13--|-15]
#
# ? ???????? ???? ? ????
# ? cluster …Run Code Online (Sandbox Code Playgroud) 我一直在做一些Java Streams操作,当然它不喜欢我的代码,并且拒绝提供有用的错误消息.(作为参考,我对C#和Linq没有任何问题,所以我从概念上理解了我想要做的一切.)所以我开始深入研究将明确的泛型类型添加到我的代码中的每个方法中,这样我就能找到源代码问题,正如过去的经验告诉我,这是一条成功的前进道路.
环顾四周,我碰到了一些我不理解的东西.请考虑Java源代码中的以下代码(重新格式化一点):
public static <T> Collector<T, ?, List<T>> toList() {
return new Collectors.CollectorImpl<>(
(Supplier<List<T>>) ArrayList::new,
List::add,
(left, right) -> {
left.addAll(right);
return left;
},
Collectors.CH_ID
);
}
Run Code Online (Sandbox Code Playgroud)
为什么toList方法签名?在其返回类型中需要通配符?当我删除它,我得到
Run Code Online (Sandbox Code Playgroud)Wrong number of type arguments: 2; required: 3
和
Run Code Online (Sandbox Code Playgroud)Incompatible types. Required: Collector<T, List<T>, > Found: CollectorImpl<java.lang.Object, List<T>, java.lang.Object>
当我改为?时Object,我得到(参考上面代码中的这些行/方法):
Run Code Online (Sandbox Code Playgroud)List::add – Cannot resolve method 'add' left.addAll – Cannot resolve method 'addAll(java.lang.Object)'
当我把通配符放回去检查这两个时,它们是:
Run Code Online (Sandbox Code Playgroud)List – public abstract boolean add(T e) List – public …
我有一个这种结构的表.
UserID | UserName | AnswerToQuestion1 | AnswerToQuestion2 | AnswerToQuestion3
1 | John | 1 | 0 | 1
2 | Mary | 1 | 1 | 0
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚我将使用什么SQL查询来获取这样的结果集:
UserID | UserName | QuestionName | Response
1 | John | AnswerToQuestion1 | 1
1 | John | AnswerToQuestion2 | 0
1 | John | AnswerToQuestion3 | 1
2 | Mary | AnswerToQuestion1 | 1
2 | Mary | AnswerToQuestion2 | 1
2 | Mary | AnswerToQuestion3 | 0
Run Code Online (Sandbox Code Playgroud)
我正在尝试将三列分成三个单独的行.这可能吗?
当得到延迟执行的值时,我会从一个方法返回一个IEnumerable.并且返回a List或者IList应该只是在结果将被修改时,否则我将返回一个IReadOnlyCollection,所以调用者知道他得到的不是用于修改(这使得该方法甚至可以重用来自其他调用者的对象) ).
但是,在参数输入方面,我有点不太清楚.我可以拿一个IEnumerable,但如果我需要不止一次枚举怎么办?
俗话说" 你所发送的是保守的,你接受的是自由主义",这表明服用IEnumerable是好的,但我并不确定.
例如,如果以下IEnumerable参数中没有元素,则可以通过.Any()先检查在此方法中保存大量工作,这在此ToList()之前需要避免枚举两次.
public IEnumerable<Data> RemoveHandledForDate(IEnumerable<Data> data, DateTime dateTime) {
var dataList = data.ToList();
if (!dataList.Any()) {
return dataList;
}
var handledDataIds = new HashSet<int>(
GetHandledDataForDate(dateTime) // Expensive database operation
.Select(d => d.DataId)
);
return dataList.Where(d => !handledDataIds.Contains(d.DataId));
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道什么是最好的签名,在这里?一种可能性是IList<Data> data,但接受列表表明您打算修改它,这是不正确的 - 这种方法不会触及原始列表,所以IReadOnlyCollection<Data>看起来更好.
但是,即使使用自定义扩展方法,也会IReadOnlyCollection强制调用者 …
我有一个数据表,我想通过一列数据表(比如Column1string类型)执行不区分大小写的组.我观察到通常LINQ to DataSet执行区分大小写的比较.例如,如果Column1有两个字符串值"Test"和"test",则在应用group by它之后返回两个单独的行,其值为"Test"和"test",而不是一个.
查询是:
var countGroupQuery = from table in dataTable.AsEnumerable()
group table by table.Field<string>(Column1) into groupedTable
select new
{
value = groupedTable.Key,
count = groupedTable.Count()
};
Run Code Online (Sandbox Code Playgroud)
是否有任何方法来执行不区分大小写,group by以便在上面的示例中我只获得一行具有一个值("Test"或"test")?ToUpper或者ToLower实际上将值更改为大写或小写而不是使用至少一个输入值,所以我不想使用它:
group table by table.Field<string>(Column1).ToUpper() into groupedTable
Run Code Online (Sandbox Code Playgroud) 我目前正在使用最新的Oracle sql开发人员.我这里只有一个麻烦.当我自动完成表名或列时,它们以小写形式显示.由于大多数人在SQL语句中都有编码指南,我通常需要所有大写的表名,列名和任何其他标识符.
我试图检查sql developer中的设置,"Code Insight"部分没有任何选项.还有其他调整吗?
就是这么简单:在SQL Developer连接到Oracle 11g的几秒钟内运行的查询在SSRS 2008 R2中需要15-25分钟.我还没有尝试过其他版本的SSRS.到目前为止,我正在从VS 2008执行所有报告执行.
我正在使用OLE DB提供程序"OraOLEDB.Oracle.1",它在过去似乎比使用Oracle提供程序给我更好的结果.
这是我到目前为止所能确定的:
•延迟是在DataSet执行阶段,与结果集或渲染时间无关.(通过直接从我插入的表中选择相同的行集来证明.)
•SSRS本身并未挂断.它确实在等待延迟所在的Oracle(通过从Oracle端终止数据库会话来证明,这导致SSRS中关于被杀死的会话的快速错误).
•我尝试使用以下形式的参数进行直接查询:参数.我的查询的早期版本更简单,可以直接查询,但似乎过了一定的复杂性,查询将从SSRS开始永远.
•然后我切换到执行将查询结果插入表或全局临时表的SP.这有点帮助,让我比直接查询更远,但同样,似乎增加的查询复杂性或长度最终也破坏了这种方法.注意:运行填充表的SP是可行的,因为在DataSource选项中选中了"使用单个事务"选项,然后按照它们在rdl文件中的出现顺序运行DataSet.只要满足所有参数,仍然会运行不返回Fields的DataSet.
•我刚刚尝试了一个表返回函数,这仍然没有改进,即使在SQL Developer中使用文字参数的直接调用在1-5秒内返回.
•有问题的数据库没有统计数据.它是供应商创建的产品的一部分,我们没有时间或管理层支持来创建/更新统计数据.我使用DYNAMIC_SAMPLING提示来动态计算统计数据并获得更好的执行计划:没有统计数据,基于成本的优化器很少使用LOOP连接而不是HASH连接,导致类似的多分钟执行时间.因此,我提出了查询提示来强制连接顺序,并使其使用策略散列连接,将执行时间缩短到几秒钟.我没有回去尝试使用这些执行提示直接在SSRS中查询.
•我从我们的Oracle DBA那里得到了一些帮助,他们设置了一个跟踪(或者等同于Oracle的东西)并且他能够看到正在运行的东西,但到目前为止他还没有找到任何有用的东西.不幸的是,他的时间有限,我们无法真正深入了解服务器端的执行情况.我没有经验可以快速完成这项工作,也没有时间自己研究如何做到这一点.关于如何确定发生了什么的建议将不胜感激.
我唯一的假设是:
•查询以某种方式获得了糟糕的执行计划.例如,当存在数万个"左"或外环行而不是仅仅几百个时,不正确地使用LOOP连接而不是HASH连接.
•SSRS可以将参数提交为nvarchar(4000)或其他东西而不是合理的东西,并且由于Oracle SP和函数参数没有长度规范但是从查询调用中获取它们的执行长度,那么参数嗅探等一些过程就是弄乱执行计划,就像前一点一样.
•查询以某种方式被SSRS /提供者重写.我使用多值参数,但不是这样:参数作为表达式Join(参数!MultiValuedParameter.Value,",")提交,因此它不需要任何重写.只是一个简单的绑定和提交.我不知道在SP和函数调用中这是怎么回事,但天哪,还有什么呢?
我意识到这是一个非常复杂和冗长的查询,但它完全符合我的需要.它会在1-5秒内运行,具体取决于要求的数据量.造成这种复杂性的一些原因是:
无论如何,所以这里是查询,SP版本(虽然我认为它不会有太大帮助).
create or replace
PROCEDURE VendorInvoiceSummary (
FromDate IN date,
ToDate IN date,
CostCenterList IN varchar2,
IncludeWeekly IN varchar2,
ComparisonMonths IN number,
IncludeYTD IN varchar2
)
AS
BEGIN
INSERT INTO InvoiceSummary (Mo, CostCenter, Vendor, VendorName, Section, TimeUnit, Amt)
SELECT
Mo,
CostCenter,
Vendor,
VendorName,
Section,
TimeUnit,
Amt …Run Code Online (Sandbox Code Playgroud) 以下查询用于工作:
select * from information_schema.columns where column_name like ...
Run Code Online (Sandbox Code Playgroud)
但现在它抛出一个错误:
Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'information_schema.columns'.
Run Code Online (Sandbox Code Playgroud)
应用程序已升级,但视图仍必须存在于数据库中.
注意:以下代码实际上可以正常工作,但显示了我自己的解决方案中失败的方案.有关更多信息,请参阅本文的底部.
有了这些课程:
public class MainType {
public static readonly MainType One = new MainType();
public static readonly MainType Two = SubType.Two;
}
public sealed class SubType : MainType {
public new static readonly SubType Two = new SubType();
}
Run Code Online (Sandbox Code Playgroud)
获取字段One和Two:
List<FieldInfo> fieldInfos = typeof(MainType)
.GetFields(BindingFlags.Static | BindingFlags.Public)
.Where(f => typeof(MainType).IsAssignableFrom(f.FieldType))
.ToList();
Run Code Online (Sandbox Code Playgroud)
最后,得到他们的价值观:
List<MainType> publicMainTypes = fieldInfos
.Select(f => (MainType) f.GetValue(null))
.ToList();
Run Code Online (Sandbox Code Playgroud)
在LinqPad或带有上述代码的简单单元测试类中,一切正常.但是在我的解决方案中,我有一些想要处理这些字段的所有实例的单元测试,GetValue可以返回父类型的字段,但是父字段应该具有子类型的实例,它们总是代替null!(如果发生在这里,那么最终列表将{ One, null }代替{ One, Two }.)测试类与两种类型(每个都在他们自己的文件中)处于不同的项目中,但我暂时将 …
sql-server ×3
c# ×2
oracle ×2
autocomplete ×1
c#-6.0 ×1
collections ×1
dataset ×1
datatable ×1
generics ×1
group-by ×1
http-request ×1
java ×1
linq ×1
numpy ×1
oracle11g ×1
pandas ×1
parameters ×1
powershell ×1
python ×1
reflection ×1
sql ×1
ssrs-2008 ×1
static ×1
unpivot ×1
uppercase ×1
wildcard ×1