是否存在任何需要RIGHT JOIN的查询,或者是否可以使用LEFT JOIN重写它们?
更具体地说,如果没有正确的连接,你如何重写这个(我猜是没有任何子查询或其他幻想):
SELECT *
FROM t1
LEFT JOIN t2 ON t1.k2 = t2.k2
RIGHT JOIN t3 ON t3.k3 = t2.k3
我在标记为a的页面上有一个方法,[WebMethod]
它使用一些会话状态作为其操作的一部分.在我编写这段代码之后,EnableSessionState
当你在a中使用会话状态时,我突然想要使用闪存[WebMethod]
(例如,请参阅此处:http://msdn.microsoft.com/en-us/library/byxd99hx.aspx) .但似乎工作正常.为什么?
示例代码背后:
protected void Page_Load(object sender, EventArgs args) {
this.Session["variable"] = "hey there";
}
[System.Web.Services.WebMethod]
public static string GetSessionVariable() {
return (string)HttpContext.Current.Session["variable"];
}
Run Code Online (Sandbox Code Playgroud)
样本体html:
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
function getSession() {
$.ajax({
type: 'POST',
url: 'Default.aspx/GetSessionVariable',
data: '{ }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
document.getElementById("showSessionVariable").innerHTML = msg.d;
}
});
return false;
}
</script>
<form id="form1" runat="server">
<div id="showSessionVariable"></div>
<button onclick='return getSession()'>Get Session Variable</button>
</form>
Run Code Online (Sandbox Code Playgroud) 我发现Chrome和Firefox中的WebSockets在一分钟不活动后断开连接.基于我在网上看过的东西,我已经准备好责怪代理或某些服务器设置或其他东西,但这不会发生在IE或Edge中.看起来,如果服务器在一分钟不活动后断开连接,那将适用于IE和Edge,就像Chrome和Firefox一样.
有人知道为什么吗?是否记录在任何地方?我知道一种可能的方法来通过ping来阻止它,但我更感兴趣的是它为什么会发生.断开连接时给出的原因代码是1006,表示浏览器关闭了连接.不会抛出任何错误,也不会触发套接字的onerror事件.
该项目建立在https://glitch.com/edit/#!/noiseless-helmet,您可以在其中查看和运行所有内容.客户端页面在此处提供:https://noiseless-helmet.glitch.me/
这是我的客户页面:
<div id="div">
</div>
<script>
let socket = new WebSocket("wss://noiseless-helmet.glitch.me/");
socket.onmessage = function(event) {
div.innerHTML += "<br>message " + new Date().toLocaleString() + " " + event.data;
};
socket.onopen = function (event) {
div.innerHTML += "<br>opened " + new Date().toLocaleString();
socket.send("Hey socket! " + new Date().toLocaleString());
};
socket.onclose = function(event) {
div.innerHTML += "<br>socket closed " + new Date().toLocaleString();
div.innerHTML += "<br>code: " + event.code;
div.innerHTML += "<br>reason: " + event.reason;
div.innerHTML += …
Run Code Online (Sandbox Code Playgroud) 我有一个带全文索引的表.此查询返回2个结果:
SELECT *
FROM SampleTable
WHERE ContentForSearch LIKE '% mount %'
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
此查询返回1个结果:
SELECT *
FROM SampleTable
WHERE CONTAINS(ContentForSearch, '"mount"')
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
在表中添加单词"mount"的新实例确实会显示在搜索中.为什么?
我已经检查了停用词列表,因为我知道如何.这不会返回任何结果:
SELECT *
FROM sys.fulltext_stoplists
Run Code Online (Sandbox Code Playgroud)
这不会返回任何结果:
SELECT *
FROM sys.fulltext_system_stopwords
WHERE stopword like '%mount%'
Run Code Online (Sandbox Code Playgroud)
我还检查了索引是否是最新的,这返回了当前时间(减去几分钟)和0,表示空闲:
SELECT DATEADD(ss, FULLTEXTCATALOGPROPERTY('SampleTableCatalog','PopulateCompletionAge'), '1/1/1990') AS LastPopulated,
FULLTEXTCATALOGPROPERTY('SampleTableCatalog','PopulateStatus')
Run Code Online (Sandbox Code Playgroud)
我还在字符串中进行了一些搜索,这些搜索没有显示在CONTAINS结果中,以查看ASCII值是否奇怪(如果需要可以提供查询),但它们与显示的那些完全相同.
在数据库的一个副本上,有人跑了:
ALTER FULLTEXT INDEX ON SampleTable SET STOPLIST = OFF;
ALTER FULLTEXT INDEX ON SampleTable SET STOPLIST = SYSTEM;
Run Code Online (Sandbox Code Playgroud)
这似乎解决了它,但我不明白为什么,我不舒服做出我不明白的变化.
更新 Stoleg的评论最终促成了我的解决方案.在某个数据库服务器上以某种方式关闭了全文索引.当该数据库随后还原到另一台服务器时,即使新服务器正在更新索引,那些未在第一台服务器上编制索引的条目仍未编入索引.我发现这是通过使用Stoleg的查询来检查索引中缺少哪些行,然后检查这些行的修改日期(幸运地存储了).我注意到数据库在另一台服务器上的日期行的模式不在索引中.问题服务器上的解决方案是打开全文索引并重建目录.至于如何关闭索引,我自己也不明白.DBA关于如何解决它的评论是"我将全文搜索作为资源添加到集群节点".
首先,我需要使用第三方ActiveX控件.
接下来,我必须使用stdole库来为第三方控制一些图像.当我在默认设置下编译时,我收到一些警告:
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\Interop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly.
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly.
Run Code Online (Sandbox Code Playgroud)
很容易,我会遵循这个建议,并为嵌入式引用设置Embed Interop Types为false.一切都看起来很好,直到我现在去客户机,当突然应用程序抛出这个:
Could not load file or assembly 'stdole, Version=7.0.3300.0, Culture=neutral, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试最简单的例子,直接从他们的网站上提取。这是我的整个 html 文件,代码完全取自https://peerjs.com/index.html:
<script src="https://unpkg.com/peerjs@1.3.1/dist/peerjs.min.js"></script>
<script>
var peer = new Peer();
var conn = peer.connect('another-peers-id');
// on open will be launch when you successfully connect to PeerServer
conn.on('open', function(){
// here you have conn.id
conn.send('hi!');
});
</script>
Run Code Online (Sandbox Code Playgroud)
在 Chrome 和 Edge 中,我在控制台中得到了这个:
peerjs.min.js:64 GET https://0.peerjs.com/peerjs/id?ts=15956160926060.016464029424720694 net::ERR_CONNECTION_REFUSED
Run Code Online (Sandbox Code Playgroud)
在 Firefox 中,我得到了这个:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://0.peerjs.com/peerjs/id?ts=15956162489620.8436734374800061. (Reason: CORS request did not succeed).
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
运行这个:
bcp MyDb.dbo.uvwMyView out "c:\Test.txt" -SMyServer -T -c
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Native Client]Unable to resolve column level collations
Run Code Online (Sandbox Code Playgroud)
搜索谷歌找到了许多可能的解决方案,但没有一个对我有用,也没有为他们提议的任何人工作。与在线发布的其他案例一样,当我在 Management Studio 中选择该视图时,该视图不会引起任何问题,并且结果看起来很正常(并且没有特殊字符,我检查过)。结果中的一个文本列有 collation SQL_Latin1_General_CP1_CS_AS
。我尝试了几个 bcp 选项,但没有效果:-w、-CRAW、-COEM、-C850、-C437。
我正在使用 SQL Server 2005。
我正在运行,对于目录中的System.IO.Directory.GetFiles("my_directory_name_on_network")
大多数文件来说都很好,但其中一个文件在其中出现了两次。11320
以前有人遇到过这个吗?知道这意味着什么吗?当我查看 Windows 资源管理器时,确实只有一个文件。
更新
最终我也能够在 Windows 资源管理器中看到该问题。相同的文件名在此处列出两次。
我想要三个数字(或单词或其他),前两个用红色框包围,后两个用绿色框包围。所以盒子会重叠。这在 html/css 中可能吗?我在代码段中有一个半合法的尝试,希望能得到我想要的东西,尽管它当然不起作用。如果可能的话,我想避免绝对定位或类似的东西,因为我真的想使用这些元素来标记文本,并计划稍后阅读该标记。
.red {
border-style: solid;
border-color: red;
padding: 4px;
}
.green {
border-style: solid;
border-color: green;
}
Run Code Online (Sandbox Code Playgroud)
1 2 3 <br /><br />
<span class="red">1 2</span> 3 <br /><br />
1 <span class="green">2 3</span> <br /><br />
<span1 class="red"">1 <span2 class="green">2</span1> 3</span2>
Run Code Online (Sandbox Code Playgroud)
这大约是我希望它看起来像:
什么(如果有的话)是Python的itertools.chain方法的C#等价物?
Python示例:
l1 = [1, 2]
l2 = [3, 4]
for v in itertools.chain(l1, l2):
print(v)
Run Code Online (Sandbox Code Playgroud)
结果:
1
2
3
4
请注意,我对制作一个结合前两个然后处理它的新列表不感兴趣.我想通过不实例化这个组合列表来节省itertools.chain提供的内存/时间.
我有一个专有的COM库,它返回一个整数数组(当然是以他们自己的专有格式).当我从主UI线程访问此数组时,一切都很好并且运行得很快.当我从另一个线程访问它时,访问速度非常慢.下面有一些示例代码.
private void test() {
ProprietaryLib.Integers ints = ProprietaryLib.GetInts();
int x;
for(int i = 0; i < 500; i++)
for(int j = 0; j < ints.Count; j++)
x = ints[j];
}
private void button1_Click(object sender, EventArgs e) {
test(); // Very little time
new System.Threading.Thread(() => test()).Start(); // Lots of time
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我有什么方法可以加快速度吗?如果我使用多处理而不是多线程,那么我是否有希望获得良好的性能?(虽然,听起来更复杂.)
更新:
我对以下答案感到满意,但想在这里添加一些数据以供参考(我自己和其他人的).
如上所示在新线程中创建和访问对象,每次访问大约12ns.据推测,该对象实际上是在主线程上创建的,慢速是由于从那里封送数据.
如果您在主线程上显式创建数据但在标记为单线程单元的新线程中访问它,则访问时间会更慢,每次访问时间为15 ns.我想.NET必须有一些额外的开销来保持公寓的美观,尽管它让我担心我不知道那是什么开销.只有2-3 ns的差异,但不一定要多.
如果您在标记为STA的新线程上创建并访问该对象,则每次访问时间会以.2ns的速度消失.但这个新线程真的安全吗?这是我想到的另一个问题的问题.
如今,在异步代码中,SemaphoreSlim 似乎是lock(obj) {}
. 我找到了有关如何使用它的建议:
https ://blog.cdemi.io/async-waiting-inside-c-sharp-locks/
特别是,此人建议使用以下代码:
//Instantiate a Singleton of the Semaphore with a value of 1. This means that only 1 thread can be granted access at a time.
static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1,1);
Run Code Online (Sandbox Code Playgroud)
//Asynchronously wait to enter the Semaphore. If no-one has been granted access to the Semaphore, code execution will proceed, otherwise this thread waits here until the semaphore is released
await semaphoreSlim.WaitAsync();
try
{
await Task.Delay(1000);
}
finally
{
//When the task …
Run Code Online (Sandbox Code Playgroud)