我正在尝试将图片保存到我的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;
它不发送图片,但数组有图片......
我做错了什么? 感谢
答案 0 :(得分: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
答案 1 :(得分:0)
我纠正了这个问题! :d
@DanSnell所说的让我想起我做错了什么。
由于连接和适配器的代码很好,我发现不是通过参数传递包含我的图像的字节数组,而是传递null byte array
这就是为什么当我将字节数组添加到新行row["Picture"] = picArray;
时,列Picture没有收到任何值,只是一个空值。
仅纠正将字节数组传递到我的类中的方法解决了这个问题。
我没有更改上面的任何代码,所以它可以帮助那些想要将图像从C#保存到SQL Server数据库
的人