2

我正在尝试将图片保存到我的 SQL Server 数据库中,但它不起作用。

Picture我表中的列Customers是类型image,我正在尝试将带有图片的字节数组传递给Picture

我的代码是这样的:

SqlConnection conn = new SqlConnection("my working connection string");
SqlDataAdapter adapter = new SqlDataAdapter("Select * from Customers", conn);

DataSet ds = new DataSet("Customers");

adapter.Fill(ds);

然后我为图像创建一个字节数组:

string path = null;
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.ShowDialog();

path = fileDialog.FileName;

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);

byte[] picArray = new byte[fs.Length];
fs.Read(picArray, 0, Convert.ToInt32(fs.Length));
fs.Close();

这就是我将值传递给数据库的方式:

DataRow row = ds.Tables[0].NewRow();
row["Id"] = "ID";
row["Name"] = "NAME";
row["Picture"] = picArray;
ds.Tables[0].Rows.Add(row);

adapter.Update(ds);

问题是这一行:

row["Picture"] = picArray;

它不发送图片,但数组有图片......

我究竟做错了什么?谢谢

4

2 回答 2

0

您是否使用对 的更改来更新数据库DataSet

SqlConnection conn = new SqlConnection("my working connection string");
SqlDataAdapter adapter = new SqlDataAdapter("Select * from Customers", conn);

DataSet ds = new DataSet();

// Create command builder. This line automatically generates the update commands for you, so you don't 
// have to provide or create your own.
SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(adapter);

// Set the MissingSchemaAction property to AddWithKey because Fill will not cause primary
// key & unique key information to be retrieved unless AddWithKey is specified.
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

adapter.Fill(ds, "Customers");

// .... Code to fill the picArray....

DataRow row = ds.Tables[0].NewRow();
row["Id"] = "ID";
row["Name"] = "NAME";
row["Picture"] = picArray;
ds.Tables["Customers"].Rows.Add(row);

adapter.Update(ds, "Customers"); //Update the changes to the database
于 2013-06-29T04:13:08.810 回答
0

我纠正了这个问题!:D

@DanSnell 说的话让我想起了我做错了什么。

由于连接和适配器的代码很好,我发现不是通过参数传递包含我的图像的字节数组,而是传递一个null byte array

这就是为什么当我将字节数组添加到新行时row["Picture"] = picArray;,列 Picture 没有收到任何值,只是一个空值。

更正将字节数组传递到我的班级内部的方式解决了这个问题。

我没有更改上面的任何代码,因此它可能对想要将图像从 C# 保存到 SQL Server 数据库中的人有所帮助

于 2013-06-29T21:21:19.427 回答