我需要向数据库发送一个SQL查询,告诉我表中有多少行.我可以使用SELECT获取表中的所有行,然后对它们进行计数,但我不喜欢这样做.是否有其他方法可以将表中的行数询问SQL服务器?
我试图在尽可能短的时间内插入大量( - )数量的元素,我尝试了这两种选择:
1)流水线:
List<Task> addTasks = new List<Task>();
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
Task<bool> addAsync = redisDB.SetAddAsync(string.Format(keyFormat, row.Field<int>("Id")), row.Field<int>("Value"));
addTasks.Add(addAsync);
}
Task[] tasks = addTasks.ToArray();
Task.WaitAll(tasks);
Run Code Online (Sandbox Code Playgroud)
2)配料:
List<Task> addTasks = new List<Task>();
IBatch batch = redisDB.CreateBatch();
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
Task<bool> addAsync = batch.SetAddAsync(string.Format(keyFormat, row.Field<int>("Id")), row.Field<int>("Value"));
addTasks.Add(addAsync);
}
batch.Execute();
Task[] tasks = addTasks.ToArray();
Task.WaitAll(tasks);
Run Code Online (Sandbox Code Playgroud)
我没有注意到任何显着的时间差异(实际上我预计批处理方法会更快):对于大约250K的插入,我得到流水线约7秒,批量约8秒.
阅读有关流水线的文档,
"使用流水线操作允许我们立即将两个请求都发送到网络上,消除了大部分延迟.此外,它还有助于减少数据包碎片:单独发送的20个请求(等待每个响应)将需要至少20个数据包,但发送了20个请求在管道中可以容纳更少的数据包(甚至可能只有一个)."
对我来说,这听起来很像一个批处理行为.我想知道幕后是否有两者之间有很大的区别,因为在一个简单的检查中,procmon我看到 …
有谁知道一种方法来验证数据库中所有存储过程中的查询的正确性?我正在考虑如果您修改代码文件中的某些内容,只需执行重建就会向您显示编译错误,指出您需要修复的地方.在数据库方案中,假设您修改表并删除存储过程中使用的列,在第一次运行该过程之前,您将不会了解有关此问题的任何信息.
我正在试图弄清楚为什么Google Analytics中的电子商务跟踪似乎不起作用.我可以看到正确跟踪的页面视图但没有交易.
确认页面中的代码段:
<head>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-1']);
_gaq.push(['_setDomainName', '.mydomain.com']);
_gaq.push(['_trackPageview']);
_gaq.push(['b._setAccount', 'UA-YYYYYYYY-1']);
_gaq.push(['b._setDomainName', 'none']);
_gaq.push(['b._addTrans',
'44bbd391-ff38-4f8d-ad68-aec490666151',
'Name',
'1.00',
'',
'',
'',
'',
''
]);
_gaq.push(['b._addItem',
'44bbd391-ff38-4f8d-ad68-aec490666151',
'15',
'test',
'',
'1.00',
'1'
]);
_gaq.push(['b._trackTrans']);
_gaq.push(['b._trackPageview']);
(function () {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
...
</head>
Run Code Online (Sandbox Code Playgroud)
我正在使用Firebug监控页面上的流量,确认已完成所有像素请求并返回OK.
我读过你需要等待几个小时,最多一天才能在GA中看到结果,但是我只能等待几分钟就能看到页面浏览量.
但是,在任何地方都找不到使用相同跟踪器对象("b")跟踪的事务(电子商务报告是否可以比页面视图更慢刷新?)
我正在尝试从Web应用程序中的实用程序类访问应用程序状态,但我不确定最好的方法.我寻找一个静态成员,但没有任何用处(我正在考虑HttpContext.Current的某些方面).
到目前为止我找到的最好的解决方案是在实用程序类中有一个成员,它将在Global.asax.cs的Application_Start事件中初始化(我可以从this.Application那里得到它)但是会有"某事"的风险"发生在那个引用上(我不关心正在重启的应用程序,因为我只是在寻找缓存功能)?
情况是我有一个模拟实体的表.该实体具有许多属性(每个属性由表中的列标识).问题在于,将来我需要添加新属性或删除一些属性.问题是如何建模数据库和相应的代码(使用C#),以便在出现这种情况时,很容易"拥有"一个新属性.
一开始只有一个属性,所以我有一列.我在类中定义了相应的属性,使用适当的类型和名称,然后创建存储过程来读取它并更新它.然后出现了第二个属性,快速复制粘贴,更改了名称和类型以及一些SQL,就在那里.显然这不是一个合适的模型.这时你们中的一些人可能会建议使用ORM(EF或其他),因为这会自动生成SQL和代码,但是现在这不是我的选择.
我想过只有一个过程用于读取一个属性(按属性名称),另一个用于更新它(按名称和值),然后是一些用于读取同一语句中实体的一堆或所有属性的一般过程.如果你考虑使用泛型但是数据库不知道泛型,那么在C#中听起来很容易,所以不可能有一个强类型的解决方案.
我想有一个"尽可能强类型"的解决方案,所以我不需要做很多的转换和解析.我会在代码中定义可用的属性,这样你就不会猜测你有什么可用并使用魔术字符串等.然后,在系统中添加新属性的过程仅意味着向表中添加新列并在代码中添加新属性"定义"(例如,在枚举中).
我正在构建一个webapp,我可以使用一个允许我唯一识别用户计算机的解决方案.
原因是,一旦用户登录到应用程序,他/她就可以启动与应用程序相关的多个会话(存储在mySQL中) - 但是,会话应该只能从会话中的计算机上获得发起了.
我不能使用cookie,因为应用程序应该允许用户关闭浏览器,重新启动计算机等,而不会有丢失用户会话的风险.
起初我以为我可以得到类似主板序列的东西.Naaah,不会发生.
然后我想到了基于用户远程地址+ MAC地址生成MD5哈希,直到我发现这只能使用旧版本的IE与ActiveX.
然后我开始考虑是否所有Chrome安装都有某种我可以使用的独特浏览器ID?......一直没能找到任何有用的东西.
关于如何根据用户计算机生成唯一字符串的任何好主意?
我正在尝试使用一些富集程序(现在的机器名和线程ID)以及滚动文件接收器和Loggly接收器.虽然Loggly事件正确包含机器名称和线程ID属性,但我在滚动文件事件中看不到这些.
这是我的xml /代码配置:
<add key="serilog:minimum-level" value="Information" />
<add key="serilog:write-to:RollingFile.pathFormat" value="C:\Foo\bar-{Date}.txt" />
<add key="serilog:using" value="Serilog.Sinks.Loggly" />
<add key="serilog:write-to:Loggly.inputKey" value="redacted Loggly key" />
Run Code Online (Sandbox Code Playgroud)
new LoggerConfiguration()
.ReadAppSettings()
.Enrich.WithMachineName()
.Enrich.WithThreadId()
.CreateLogger()
Run Code Online (Sandbox Code Playgroud)
有没有人设法做到这一点?这种行为是设计还是滚动文件接收器不支持这些丰富?
如何获得结果
tx.executeSql('select query for a table',[],sucessCB);
function sucessCB(tx, results){ //<--- this results param
console.log(results.row.item(0).name);
}
Run Code Online (Sandbox Code Playgroud)
我尝试了类似的东西
function(){
var tab = [];
tx.executeSql('select query for a table',[],sucessCB);
function sucessCB(tx, results){ //<--- this results param
console.log(results.row.item(0).name);
for(i=0;i<results.length;i++){
tab.push(results.row.item(i))
}
}
console.log(tab); //<--- this returns always null
}
Run Code Online (Sandbox Code Playgroud)
如何在回调函数之外访问变量,或者是否有直接将sql结果存储在变量中的方法。有没有一种方法可以将变量再次发送到回调函数中
tx.executeSql('another select query',[],function(tx, results, tab ){ // <-- this inside sucessCB
console.log(tab);
});
Run Code Online (Sandbox Code Playgroud)
在所有情况下,变量均为null。还有另一种方法可以做到这一点。任何建议都会有所帮助,谢谢。
Coderbyte挑战赛7
有人可以帮忙吗?下面的函数应该检查字符串中的字母是否有'+'并且两边都返回true,而当字母没有以+为边界时则为false.但是当我传递下面的字符串时,它会传递true,当它应该是false时,因为k在右边没有+.提前致谢.
str = '+f+++l+k=+'
alpha = 'abcdefghijklmnopqrstuvwxyz'
function SimpleSymbols(str) {
str = str.toLowerCase()
for (i=0 ; i<str.length ; i++) {
if (alpha.indexOf(str.charAt(i)) > 0 && i === 0) {
return false
}
else if (alpha.indexOf(str.charAt(str.length -1)) > 0) {
return false
}
else if (alpha.indexOf(str.charAt(i)) > 0 &&
(str.charAt(i-1) !== '+' || str.charAt(i+1) != '+')) {
return false
}
else {return true}
}
}
Run Code Online (Sandbox Code Playgroud) 嘿家伙在我的SQL查询上得到这个语法错误:
'#1064 - 你的SQL语法有错误; 查看与您的MySQL服务器版本相对应的手册,以便在'A(状态)值("NOK")内使用正确的语法INNER JOIN lm_Schwellwert S ON A.Typ = S.Typ WHERE AB'在第1行
这是我的查询:
INSERT INTO lm_Artikel A INNER JOIN lm_Schwellwert S
ON A.Typ = S.Typ (Status) VALUES ("NOK") WHERE A.Bestand < S.Schwellwert
Run Code Online (Sandbox Code Playgroud)
你能帮我找到错误我不知道出了什么问题.
我想检查类似的模式是否在二进制字符串中重复.
例如,如果字符串是
11110111101111011110 or
100111100111100111100111
Run Code Online (Sandbox Code Playgroud)
我想检测第一个字符串总是重复11110而另一个字符串是100111.我怎样才能在Perl中完成这样的任务?重复的字符串可以是任何长度.