【问题标题】:Open a Blob file from Mysql to PC using SaveFileDialog使用 SaveFileDialog 打开从 Mysql 到 PC 的 Blob 文件
【发布时间】:2013-12-30 07:01:47
【问题描述】:

我正在尝试使用以下代码使用 SaveFileDialog 从 MySql 打开一个 Blob(winword 文档):

myConn.Open();
MySqlDataReader myReader;
myReader = view.ExecuteReader();
long CurrentIndex = 0;
long BytesReturned;


while (myReader.Read())
{
    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
        string strFilename = saveFileDialog1.FileName;
        FileStream fs = new FileStream(strFilename, FileMode.CreateNew, FileAccess.Write);
        BinaryWriter bw = new BinaryWriter(fs);
        CurrentIndex = 0;
        long len = myReader.GetBytes(1, 0, null, 0, 0);
        byte[] blob = new byte[len];
        BytesReturned = myReader.GetBytes(1, CurrentIndex, blob, 0, (int)len);

        while (BytesReturned == (int)len)
        {
            bw.Write(blob);
            bw.Flush();
            CurrentIndex += (int)len;
            BytesReturned = myReader.GetBytes(1, CurrentIndex, blob, 0, (int)len);


        }
        bw.Write(blob,0 , (int)len - 1);
        bw.Flush();
        bw.Close();

    }
    myReader.Close();
}

我得到的例外是:

索引数组的边界。

对 FileStream 以外的其他方法有什么建议吗?

【问题讨论】:

  • 您在哪一行收到此错误?
  • 对不起,这是一个异常而不是错误。我不知道如何跟踪发生异常的行。
  • 只要调试你的代码,你就可以看到你从哪里得到它..
  • 我所能看到的是:MySql.Data.dll 中发生了“System.IndexOutOfRangeException”类型的第一次机会异常。对不起,只是一个新手。

标签: c# mysql


【解决方案1】:

没有。事实上,它应该只读取 1 列。还有 1 行。

根据您的评论,我认为问题是您尝试在此行中获取第二列(作为第一个参数);

long len = myReader.GetBytes(1, 0, null, 0, 0);

因为来自SqlDataReader.GetBytes method

public override long GetBytes(
    int i,
    ...
)

参数 i 类型:System.Int32 从零开始的列序号。

当您在 GetBytes 方法中将 1 作为第一个参数时,实际上是在尝试获取 DataReader 的第二列。

1 更改为0 应该可以解决您的问题。喜欢;

long len = myReader.GetBytes(0, 0, null, 0, 0);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
相关资源
最近更新 更多