小编Jef*_*ffR的帖子

SQLDataReader如何处理真正大的查询?

实际上我不确定标题是否准确描述了这个问题,但我希望它足够接近.

我有一些代码从数据库表执行SELECT,我知道这将导致大约150万行被选中.每行中的数据不大 - 每行可能20个字节.但这仍然是30MB的数据.每行包含一个客户编号,我需要为每个客户做一些事情.

我的代码看起来像:

SqlConnection conn = new SqlConnection(connString);
SqlCommand command = new SqlCommand("SELECT ... my select goes here", conn);
using (conn)
{
    conn.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while(reader.Read())
        {
            ... process the customer number here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我只是迭代SELECT返回的所有客户.

我的问题是,这会导致数据库的多次读取,还是只读取一次?我假设网络缓冲区不足以容纳30MB的数据,那么.NET在这里做什么呢?每次Read()推进指针时,SELECT的结果是否会让某些地方的SQLDataReader啃掉一行?还是回到数据库?

我问的原因是代码中的"...处理客户编号"部分可能需要一些时间,因此对于150万客户而言,代码(上面的while循环)将花费很多时间来完成.当发生这种情况时,我是否需要担心其他人在数据库上阻挡我,或者我知道我已经从数据库中完成了一个SELECT并且我不会再回来了吗?

c# sql

10
推荐指数
3
解决办法
6744
查看次数

Sequelize 预加载嵌套关联

我对 Sequelize 还很陌生,我似乎无法找到我的问题的答案。

我有一个模型“团队”,其中的关联定义为:

    team.hasMany(members, {foreignKey: 'memberId', onDelete: 'cascade'});
    team.belongsTo(memberDetails, {as: 'type1', foreignKey: 'type1Id'});
    team.belongsTo(memberDetails, {as: 'type2', foreignKey: 'type2Id'});
Run Code Online (Sandbox Code Playgroud)

我想从数据库中加载团队行,并且在加载每一行时,我还希望包含(一些)关联。我使用以下代码:

team.findAll({
   include: [
               {
                   model: memberDetails,
                   as: 'type1'
               }
            ]
})
Run Code Online (Sandbox Code Playgroud)

这将按预期加载团队,并加载关联的成员,还加载和附加每个包含的“type1”成员的详细信息。

但是, memberDetail 模型也有关联:

    memberDetails.belongsTo(memberInfo, {as: 'type1', foreignKey: 'type1Id'});
    memberDetails.belongsTo(memberInfo, {as: 'type2', foreignKey: 'type2Id'});
Run Code Online (Sandbox Code Playgroud)

我想要的是为每个加载的成员加载 memberInfo 关联 - 类似于 INCLUDEd memberDetails,但我不知道如何为急切加载的关联指定 INCLUDE。

任何人都可以帮忙吗?

javascript node.js sequelize.js

7
推荐指数
1
解决办法
3587
查看次数

SELECT从程序中超时,但可以从SQL Server Management Studio运行

我在执行SQL SELECT时遇到超时.

我连接到数据库:

using (SQLConnection conn = SQLConnection(@"Data Source=mydbServer;Initial Catalog=mydb;Integrated Security=true;Timeout=180");
{
    conn.Open();
Run Code Online (Sandbox Code Playgroud)

并成功连接.

在使用{}我设置的内部:

string query = @"SELECT a.field, a.timestamp " +
               "FROM mydb.dbo.myTable1 a WITH(NOLOCK) " +
               "LEFT JOIN [myOtherdbServer].myOtherdb.dbo.MyTable2 b WITH(NOLOCK) " +
               "ON a.field = b.field " +
               "WHERE b.field is NULL " +
               "AND a.timestamp >= '2015-05-01 00:00:00.000' " +
               "AND a.timestamp < '2015-06-01 00:00.00.000'";
Run Code Online (Sandbox Code Playgroud)

并执行命令:

using (SQLCommand queryCmd = new SQLCommand(query, conn)
{
    queryCmd.CommandTimeout = 300;

    using (SQLDataReader rdr = queryCmd.ExecuteReader())
    { 
Run Code Online (Sandbox Code Playgroud)

SQLCommand抛出超时异常:"操作完成之前经过的超时时间或服务器没有响应".

如果我在运行我的程序的同一系统上使用SQL …

c# sql sql-server

6
推荐指数
1
解决办法
1093
查看次数

如何解压缩/解压缩使用各种技术压缩/存档的文件 - zip,rar,gzip,tar

对我正在编写的系统的要求意味着我需要确定可能使用多种不同压缩/存档技术中的任何一种创建的文件/包的内容 - zip,gzip,rar,tar.这些文件将位于可以运行Windows或Unix/Linux的任何变体的远程系统上,并且可以使用任何压缩/存档技术创建文件(我将建立一个可管理的列表来支持).

System.IO.Packaging处理什么格式 - 只是拉链?

第三方图书馆?这不是我的首选 - 我需要在未来支持这个系统.

任何指导和建议将非常感谢.

c# compression zip tar system.io.packaging

2
推荐指数
1
解决办法
687
查看次数

如何使用dynamic_cast

我正在尝试使用dynamic_cast-没有成功。我有一个BASE类,以及一个从BASE派生的类A。我希望有一个指向BASE类对象的指针,该指针后来又要转换为A类。我显然没有正确执行此操作。以下代码编译:

#include <cstdio>

class BASE {
private:

    int i;

public:

     BASE(void) {i = 1; }
     virtual ~BASE(){}

     virtual void id() { printf("CLASS BASE\n"); }
 };

class A : public BASE {
public:
    A(void): BASE() {}
    A(const BASE & base) : BASE(base) {}
    A& operator = (const BASE & base) { static_cast<BASE&>(*this) = base; return *this; }

    void id() override { printf("CLASS A\n"); };
};


int main() {

    BASE* base = new BASE();

    base->id();

    A* a = new A(*base);

    a->id();

    A* …
Run Code Online (Sandbox Code Playgroud)

c++ casting

2
推荐指数
1
解决办法
89
查看次数

正则表达式来解析FTP链接字符串

我有以下代码来解析FTP链接的各个部分:

Regex exp = new Regex(@"(?i)ftp:\/\/(?<user>\S+?):(?<passwd>\S+?)@(?<host>\S+?.\S+?.\S+?.\S+?)");
Match m = exp.Match(@"Link: ftp://username:password@host.sub.domain.tld<ftp://username:password@host.sub.domain.tld/>");

Console.WriteLine("Host = " + m.Groups["host"].Value);
Console.WriteLine("User = " + m.Groups["user"].Value);
Console.WriteLine("Pass = " + m.Groups["passwd"].Value);
Run Code Online (Sandbox Code Playgroud)

其中产生以下输出:

Host = host.su
User = username
Pass = password
Run Code Online (Sandbox Code Playgroud)

为什么主机被截断?

c# regex

0
推荐指数
1
解决办法
877
查看次数