gpt4 book ai didi

c# - 使用 SaveFileDialog 从 Mysql 打开一个 Blob 文件到 PC

转载 作者:行者123 更新时间:2023-11-30 23:08:22 25 4
gpt4 key购买 nike

我正在尝试使用以下代码使用 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();
}

我得到的异常是:

Index out bounds of the array.

对于除 FileStream 之外的其他方法有什么建议吗?

最佳答案

No. In fact it should read only 1 column. And 1 row.

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

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

因为来自 SqlDataReader.GetBytes method

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

Parameters i Type: System.Int32 The zero-based column ordinal.

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

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

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

关于c# - 使用 SaveFileDialog 从 Mysql 打开一个 Blob 文件到 PC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20834855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com