我指的是很久很久以前发布在Stack Overflow上的帖子. 结束使用关闭打开的SQL连接
但是我有一个问题.我发现在SQL 2012 Express Edition和SQL 2008 Developer Edition上使用不会完全关闭连接.
这是我用过的代码.代码将遍历每个数据库并查找指定的特定表,但是,当它完成后,并且在服务器上运行sp_who时,所有连接仍然存在.状态为休眠状态,cmd为"AWAITING COMMAND",但是当您尝试创建数据库时,无法锁定模型,因为您仍然可以打开连接.这是班里的一个错误吗?
using (SqlConnection conn = new SqlConnection("Data Source=" + ServerNameCombo.Text + ";Initial Catalog=master;Persist Security Info=True;User ID=" + UserNameEdit.Text + ";Password=" + PasswordEdit.Text))
{
using (SqlCommand dbs = new SqlCommand("Select name from sysdatabases", conn))
{
conn.Open();
using (SqlDataReader reader = dbs.ExecuteReader())
{
while (reader.Read())
{
using (SqlConnection dbconn = new SqlConnection("Data Source=" + ServerNameCombo.Text + ";Initial Catalog=" + reader["name"].ToString() + ";Persist Security Info=True;User ID=" + UserNameEdit.Text + ";Password=" + PasswordEdit.Text)) …Run Code Online (Sandbox Code Playgroud) 我有一个有趣的问题.我们的客户通过电话录制了语音对话,但是录制的文件名无效.这是文件名的示例123:123.wmv
相信它,Windows Media编码器创建了该文件,并且所有信息都在文件中,但Windows显然无法识别文件名,只显示在文件夹中123,文件为0KB
从这里开始编辑:感谢Keith Miller向我指出了正确的方向,我可以编写一个函数,从文件中提取流名称并使用它.
我已经包含了如何在文件中创建两个数据流,读取流名称和从每个流中读取数据的工作副本.这非常棒,所以我希望其他人也可以使用它.我的代码忽略了主流.如果将数据写入主流,最好不要忽略它.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, uGeneralStuff;
type
_FILE_STREAM_INFORMATION = record
NextEntryOffset: cardinal;
StreamNameLength: cardinal;
StreamSize: int64;
StreamAllocationSize: int64;
StreamName: array[0..MAX_PATH] of WideChar;
end;
PFILE_STREAM_INFORMATION = ^_FILE_STREAM_INFORMATION;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
InfoBlock: _FILE_STREAM_INFORMATION;
StatusBlock : record
Status: Cardinal;
Information: PDWORD;
end;
procedure CreateFile(FileName, Info: String);
function ReadFile(FileName: String): String;
function ReadStreams(filename: String): TStringList; …Run Code Online (Sandbox Code Playgroud) 我继承了完全以32位运行的代码,但是当我将编译器更改为64位时,如果运行代码,则会出错.如果我执行代码,它(几乎总是)只是稍后失败.代码中有很多指针,C++不是我强大的套件.是否有人可以了解错误发生的原因?
我需要了解的是:首先创建BYTE***是否正常,然后BYTE**和BYTE*永远不会被分配给.我不明白这是如何工作的.我认为BYTE*会被分配到第一个,然后是BYTE**,然后是BYTE***.为什么这适用于x86,而不适用于x64?
void* AllocMemory(SIZE_T dwBYTEs)
{
void* result;
if (dwBYTEs > 0)
{
result = malloc(dwBYTEs);
if (result != NULL)
return result;
}
return 0;
}
BYTE** CreateBytes(int arg_0, int arg_4, int arg_8)
{
BYTE** hedi = (BYTE**)AllocMemory(arg_0 * 4);
if (!hedi)return 0;
hedi[0] = (BYTE*)AllocMemory(arg_0 * arg_8 * arg_4);
if (!hedi[0]) {
delete(hedi);
return 0;
}
for (int i = arg_0 - 1; i > 0; i--) {
hedi[arg_0 - 1 - i + 1] = &hedi[0][arg_4 * arg_8 …Run Code Online (Sandbox Code Playgroud) 这两个语句之间是否有区别。我做了一个测试,但在延迟执行的测试中,它失败了。有什么区别?
items.Where(w => w.Length >= length).Select(w => w.Substring(0, length)).Distinct();
Run Code Online (Sandbox Code Playgroud)
和
(from a in items
where a.Length >= 3
select a.Substring(0, length)).Distinct();
Run Code Online (Sandbox Code Playgroud)
他们对我读得一样,我相信也完全一样吗?