程序员如何能够从wcf服务向SQL Server数据库添加图像?
这是实现从wcf服务添加图像的代码:
public static void StoreImageIntoDB(string imagePath)
{
string connectionString = "server=XXXX.XXXX.XXXX.XXXX;uid=sa;password=XXXXXX;database=XXXXXX;";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string sql = "insert into ImageTable values (@img)";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
FileStream fs = new FileStream(imagePath, FileMode.Open, FileAccess.ReadWrite);
byte[] imageBytes = new byte[fs.Length];
fs.Read(imageBytes, 0, Convert.ToInt32(fs.Length));
fs.Dispose();
cmd.Parameters.Add("@img", SqlDbType.Image).Value = imageBytes;
cmd.ExecuteNonQuery();
}
}
}
public static void RetrieveImageFromDB()
{
string connectionString = "server=XXXX.XXXX.XXXX.XXXX;uid=sa;password=XXXXXX;database=XXXXXX;";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string sql = "select * from ImageTable";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet set = new DataSet();
adapter.Fill(set);
foreach (DataRow row in set.Tables[0].Rows)
{
byte[] imageBytes = row[1] as byte[];
MemoryStream ms = new MemoryStream(imageBytes);
Image image = Image.FromStream(ms);
image.Save(string.Format(@"D:\{0}.jpg", row[0].ToString()));//Save the image to disk
image.Dispose();
ms.Dispose();
}
}
}
}
现在我需要知道如何在SQL服务器中实现它。我假设这是一个查询,但不知道从哪里开始。
答案 0 :(得分:2)
我在几个级别上对象 - 表需要主键和其他控制数据。这种设计存在严重缺陷,但考虑到我们被告知的代码按预期工作,问题的答案将是
CREATE TABLE ImageTable ( ImageBinary VARBINARY(MAX) )
我建议你阅读TSQL DDL(参考https://msdn.microsoft.com/en-us/library/ff848799.aspx),或许会得到一本关于数据库设计的书。
更好的是更像
CREATE TABLE ImageTable ( ImageID INT IDENTITY PRIMARY KEY
, ImageBinary VARBINARY(MAX)
, Added DATETIME DEFAULT GETDATE()
)
会将您的插入内容更改为
string sql = "insert into dbo.ImageTable( ImageBinary ) values (@img)";
和您的检索
string sql = "select ImageBinary from dbo.ImageTable";
但是现在你有一个主键,如果你想一次想要一个图像或者能够删除一个图像,你可以将检索限制在一个日期范围内或按升序或降序排列。