小编Yon*_*oni的帖子

ExecuteScalar返回null或DBNull(开发或生产服务器)

我正在尝试向DataRowC#中的现有列添加列.之后,该列将填充我的数据库中的单个值.

DataRow dr已存在且列"COLNAME"也存在.
comTBP是我的SqlCommand.

dr["COLNAME"] = Convert.ToInt32(comTBP.ExecuteScalar());
Run Code Online (Sandbox Code Playgroud)

如果我的数据库中有值,并且ExecuteScalar()可以获得该值,则一切正常.如果我在我的开发服务器(本地)上测试此代码,如果ExecuteScalar()返回null或DBNull并且我的新列的值为0,它也可以工作.但是如果我将代码部署到生产服务器,则会出现问题.如果我做同样的事情,使用相同的数据库,它会抛出一个异常,并显示一条消息,它无法将DBNull转换为Int32.
我的问题是为什么这个错误出现在生产服务器上而不是我的本地开发服务器上?

c# dbnull asp.net-development-serv executescalar

10
推荐指数
2
解决办法
4万
查看次数

在Java中逐行读取文本文件的最快方法

对于日志处理,我的应用程序需要逐行读取文本文件.首先我使用了BufferedReader的readLine()函数,但我在网上读到BufferedReader在读取文件时速度很慢.
之后我尝试将FileInputStream与FileChannel和MappedByteBuffer一起使用,但在这种情况下,没有类似于readLine()的函数,所以我在文本中搜索换行符并处理它:

    try {
        FileInputStream f = new FileInputStream(file);
        FileChannel ch = f.getChannel( );
        MappedByteBuffer mb = ch.map(FileChannel.MapMode.READ_ONLY, 0L, ch.size());
        byte[] bytes = new byte[1024];
        int i = 0;
        while (mb.hasRemaining()) {
            byte get = mb.get();
            if(get == '\n') {
                if(ra.run(new String(bytes)))
                    cnt++;
                for(int j = 0; j<=i; j++)
                    bytes[j] = 0;
                i = 0;
            }
            else
                bytes[i++] = get;
        }
    } catch(Exception ex) {
        ex.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

我知道这可能不是实现它的好方法,但是当我以字节为单位读取文本文件时,它比使用BufferedReader快3倍,但是调用new String(bytes)会创建一个新的String并使程序在使用BufferedReader时更慢.
所以我想问一下逐行读取文本文件的最快方法是什么?有人说BufferedReader是解决这个问题的唯一方法.

PS:ra是dk.brics.Automaton库中RunAutomaton的一个实例.

java file-io readline text-files

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

强制下载ASP.Net

在ASP.Net(使用C#)中,我正在尝试使用纯文本创建一个.DAT文件并将其发送到浏览器并强制下载.我尝试了几件事,但我无法让它发挥作用.在我的aspx文件中有一个ImageButton

<asp:ImageButton ID="btnSave" runat="server" CausesValidation="False" ImageUrl="~/Images/Stages/Database/Save.png" OnClick="btnSave_OnClick" Width="26px" />
Run Code Online (Sandbox Code Playgroud)

在OnClick方法中,我正在尝试创建文件并将其发送到浏览器.

protected void btnSave_OnClick(object sender, EventArgs e)
{
    string file = "test.dat";
    string fileName = "~\\Stages\\Broekx\\Databanken\\" + file;

    FileStream fs = new FileStream(MapPath(fileName), FileMode.Open);
    long cntBytes = new FileInfo(MapPath(fileName)).Length;
    byte[] byteArray = new byte[Convert.ToInt32(cntBytes)];
    fs.Read(byteArray, 0, Convert.ToInt32(cntBytes));
    fs.Close();

    ImageButton btnSave = (ImageButton)FormViewStagesDummy.FindControl("btnSave");
    btnSave.Visible = false;

    File.Delete(Server.MapPath(fileName));

    if (byteArray != null)
    {
        this.Response.Clear();
        this.Response.ContentType = "text/plain";
        this.Response.AddHeader("content-disposition", "attachment;filename=" + file);
        this.Response.BinaryWrite(byteArray);
        this.Response.End();
        this.Response.Flush();
        this.Response.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

文件test.dat存在于正确的文件夹中,在读入字节后必须删除.我试过这个没有删除文件,也不会工作.

单击btnSave后,必须隐藏按钮,这就是我将参数Visible设置为false的原因.

我也尝试过内容类型"application/octet-stream"或PDF文件和内容类型"application/pdf",但没有任何效果.页面正常加载,没有下载文件.

c# asp.net webforms download

5
推荐指数
1
解决办法
8490
查看次数

Java - 按块读取文本文件

我想读取不同块的日志文件,使其成为多线程.该应用程序将在具有多个硬盘的服务器端环境中运行.在阅读了块之后,应用程序将逐行处理每个块的行.

我已经使用bufferedreader完成了每个文件行的读取,我可以使用RandomAccessFile和MappedByteBuffer组合我的文件块,但是将这两者结合起来并不容易.

问题是,块正在切入我的块的最后一行.我从来没有我的块的最后一行,所以处理这个最后的日志是不可能的.我正试图找到一种方法将我的文件切割成可变长度的块,尊重行的结尾.

有没有人有这样做的代码?

java line-breaks chunks

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