C# 将屏幕截图插入数据库

C# 将屏幕截图插入数据库,c#,sql-server,C#,Sql Server,我阅读了将图像插入SQL server数据库的相关内容,但我的代码无法正常工作。这是我的初始代码 public void InsertResults(string Id, Bitmap bitmap) { try { using (SqlConnection conn = new SqlConnection(connectionString)) {

我阅读了将图像插入SQL server数据库的相关内容,但我的代码无法正常工作。这是我的初始代码

public void InsertResults(string Id, Bitmap bitmap)
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand("INSERT INTO Results VALUES(@ResultID, @HasSucceeded, @ScenarioID, @Screenshot)", conn))
                     {

                        cmd.Parameters.AddWithValue("@ResultID", 0);
                        cmd.Parameters.AddWithValue("@HasSucceeded", 0);
                        cmd.Parameters.AddWithValue("@ScenarioID", Id);
                        cmd.Parameters.AddWithValue("@Screenshot", bitmap);

                        cmd.ExecuteNonQuery();
                     }
                }
            }
            catch (SqlException ex)
            {
                //Log exception
            } 
        }
我知道你不能像我上面尝试的那样插入位图图像。如何将位图转换为可以插入的内容

我知道必须使用下面这样的SQL,但我不确定如何将其集成到我的代码中

INSERT INTO DatabaseImageTable ([image name], [image])
SELECT 'SQL Server Image', *
FROM OPENROWSET(BULK N'C:\images\sql-server-image-file.jpg', SINGLE_BLOB) image;

以二进制形式写入位图:最常见的方法是将其保存到MemoryStream,然后在MemoryStream()上调用ToArray()以获取字节[]。这个字节[]可以简单地存储在“image”或(最好是)“varbinary(max)”类型的列中。

您不使用代码中的OPENROWST/BULK。相反,只需直接写入BLOB(在ADO.NET中显示为
byte[]
;将位图转换为/from)。或者,使用类型(非常适合[大型]文件存储)。这里有一些提示:如果您只需要将位图转换为字节数组以插入blob列,那么流blob包装器应该会有所帮助:表中
屏幕截图
的数据类型是什么?如果您这样做,一定要使用
varbinary
,如
image
ntext
,和
text
)已弃用,将在较新版本的sql server中删除。