我将Ids的ArrayList存储在一个处理脚本中,我希望将其作为逗号分隔列表吐出,以输出到调试日志.有没有办法在没有循环的情况下轻松搞定?
编辑:感谢Joel指出.net 2.0及以上版本中可用的List(Of T).如果你有它可以使TONS更容易.
最近我们的网站因Asprox僵尸网络 SQL注入攻击的复苏而黯然失色.攻击试图通过在ASCII编码的BINARY字符串中编码T-SQL命令来执行SQL代码.它看起来像这样:
DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x44004500...06F007200%20AS%20NVARCHAR(4000));EXEC(@S);--
Run Code Online (Sandbox Code Playgroud)
我能够在SQL中对此进行解码,但我有点担心这样做,因为我当时并不确切知道发生了什么.
我试着写一个简单的解码工具,所以我可以解码这种类型的文本,甚至不用触及SQL Server.我需要解码的主要部分是:
CAST(0x44004500...06F007200 AS
NVARCHAR(4000))
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下所有命令而没有运气:
txtDecodedText.Text =
System.Web.HttpUtility.UrlDecode(txtURLText.Text);
txtDecodedText.Text =
Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(txtURLText.Text));
txtDecodedText.Text =
Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(txtURLText.Text));
txtDecodedText.Text =
Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(txtURLText.Text));
txtDecodedText.Text =
Encoding.Unicode.GetString(Convert.FromBase64String(txtURLText.Text));
Run Code Online (Sandbox Code Playgroud)
在不使用SQL Server的情况下翻译此编码的正确方法是什么?可能吗?我会接受VB.NET代码,因为我也熟悉它.
好吧,我确定我在这里遗漏了一些东西,所以这就是我所在的地方.
由于我的输入是一个基本的字符串,我开始只是编码部分的片段--4445434C41(转换为DECLA) - 并且第一次尝试是这样做的...
txtDecodedText.Text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(txtURL.Text));
Run Code Online (Sandbox Code Playgroud)
...它所做的就是返回与我放入的完全相同的东西,因为它将每个字符转换成一个字节.
我意识到我需要手动将每两个字符解析为一个字节,因为我还不知道有什么方法可以做到这一点,所以现在我的小解码器看起来像这样:
while (!boolIsDone)
{
bytURLChar = byte.Parse(txtURLText.Text.Substring(intParseIndex, 2));
bytURL[intURLIndex] = bytURLChar;
intParseIndex += 2;
intURLIndex++;
if (txtURLText.Text.Length - intParseIndex < 2)
{
boolIsDone = true;
}
}
txtDecodedText.Text = Encoding.UTF8.GetString(bytURL);
Run Code Online (Sandbox Code Playgroud)
对于前两对来说,事情看起来很好,但是当它到达"4C"对并且说该字符串的格式不正确时,循环会变得很糟糕.
有趣的是,当我逐步调试调试器和字节数组上的GetString方法时,我能够解析到那一点,我得到", - +"作为结果.
我如何弄清楚我错过了什么 - 我是否需要为每个字节进行"直接转换"而不是尝试解析它?
有没有人知道是否有办法基于XSD创建SQLite数据库DataSet?在过去,我刚刚使用了一个基本的SQLite管理器,但是.NET如果可能的话,想要将我的开发融合得更多.
我在使用.NET XSD DataSet和TableAdapter功能的当前应用程序中有一个非常标准的表设置.我的contracts表包含一些标准合同信息,以及一个列primary department.这列是一个外键到我的Departments表,我在那里储存基本department name,id,notes.这是我的SQL Server中的所有设置和功能.
当我使用XSD工具时,我可以立即拖动两个表,它会自动检测/创建这两个表之间的外键.当我在主页上查看合同数据时,这非常有用.
但是,当我转到我的管理页面来修改部门数据时.我通常做这样的事情:
Dim dtDepartment As New DepartmentDataTable()
Dim taDepartment As New DepartmentTableAdapter()
taDepartment.Fill(dtDepartment)
Run Code Online (Sandbox Code Playgroud)
但是,在这一点上抛出异常,说明这里有一个外键引用,我猜是因为我没有Contract DataTable DataSet填充.
我该如何解决这个问题?我知道我可以简单地删除从XSD的外键使事情做工精细,但有没有额外的完整性检查,并具有XSD架构匹配数据库SQL模式是好的.
我这里有一些内部的.net Web应用程序,要求用户"注销"它们.我知道这在Intranet应用程序上似乎没什么问题,但它仍然存在.
我们对Intranet应用程序使用Windows身份验证,因此我们使用基本身份验证绑定到Active Directory,并且凭据存储在浏览器缓存中,而不是使用.net表单身份验证时的cookie.
在IE6 +中,您可以通过执行以下操作来利用他们创建的特殊JavaScript函数:
document.execCommand("ClearAuthenticationCache", "false")
Run Code Online (Sandbox Code Playgroud)
但是,对于其他需要支持的浏览器(即目前的Firefox,但我力求支持多浏览器),我只是向用户显示他们需要关闭浏览器以退出应用程序的消息,有效地刷新应用程序缓存.
有人知道一些命令/黑客/等.我可以在其他浏览器中使用来刷新身份验证缓存?
我一直在为.net应用程序编写一些Web服务,现在我已经准备好使用它们了.我已经看过很多例子,其中有本地代码用于使用服务,而不是使用Visual Studio在添加Web引用时创建的自动生成的方法.
这有什么好处吗?
如何在VB中创建泛型的默认值?在C#我可以打电话:
T variable = default(T);
Run Code Online (Sandbox Code Playgroud)
我有一个使用PhoneGap 1.0和jQuery Mobile 1.0b2在iPhone和iPad上运行的应用程序.
自从我开始使用该框架以来,我一直受到应用程序中"页面"之间切换的性能问题的困扰.按下按钮后,在转换发生之前有一个很好的第二次暂停,有时更长.我已经尝试了所有的webkit调整,我甚至等待两个框架中的升级(我开始使用Phongap 0.95和jQuery Mobile Alpha 4),这个问题还没有解决.
我正在使用尽可能多的"内置"对象(而不是自定义按钮图像),并且我在每个屏幕上使用我自己的PNG背景.应用程序本身只包含3页,另外还有一个用作选项屏幕的页面.
我不想寻找特定的解决方案,而是想知道在使用PhoneGap和jQuery Mobile for iOS时存在哪些与性能有关的常见问题?这样,其他人在处理自己的问题时可以查找选项清单
在构建存储过程/查询时,是否可以/应该使用LIKE条件作为INNER JOIN的一部分?我不确定我问的是正确的,所以让我解释一下.
我正在创建一个过程,该过程将在包含文本的列中搜索要搜索的关键字列表.如果我坐在控制台,我会这样执行:
SELECT Id, Name, Description
FROM dbo.Card
WHERE Description LIKE '%warrior%'
OR
Description LIKE '%fiend%'
OR
Description LIKE '%damage%'
Run Code Online (Sandbox Code Playgroud)
但是,我在一个存储过程中进行"强类型"列表解析时,我捡到的一个技巧是将列表解析为表变量/临时表,将其转换为正确的类型,然后对该表执行INNER JOIN在我的最终结果集中.当向程序发送整数ID列表时,这很有用.我最终得到一个如下所示的最终查询:
SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblExclusiveCard ON dbo.Card.Id = @tblExclusiveCard.CardId
Run Code Online (Sandbox Code Playgroud)
我想用一个字符串列表来使用这个技巧.但是因为我正在寻找一个特定的关键字,所以我将使用LIKE子句.理想情况下,我认为我的最终查询看起来像这样:
SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblKeyword ON dbo.Card.Description LIKE '%' + @tblKeyword.Value + '%'
Run Code Online (Sandbox Code Playgroud)
这可能/推荐吗?
有没有更好的方法来做这样的事情?
我在条款的两端加上通配符的原因是因为卡片文本中使用了"archfiend","beast-warrior","direct-damage"和"battle-damage"术语.
我的印象是,根据性能,我可以使用我指定的查询,还是使用全文关键字搜索来完成相同的任务?
除了让服务器对我想要文本搜索的字段进行文本索引之外,还有什么我需要做的吗?
我们有几个并发运行的作业,必须使用相同的log4j配置信息.他们都使用相同的appender将日志转储到一个文件中.有没有办法让每个作业动态命名其日志文件,以便它们保持独立?
谢谢
汤姆