【问题标题】:Cannot Insert Binary values into SQL Server 2008无法将二进制值插入 SQL Server 2008
【发布时间】:2013-07-06 12:22:16
【问题描述】:

我正在单击一键插入图像文件和声音文件。我正在为该任务调用两个存储过程。但问题是首先图像被保存在数据库中,然后声音文件被覆盖。声音文件未保存在为其分配的单元格中。

这两个存储过程是:

ALTER PROCEDURE [dbo].[InsertImageIntoServiceRequest] 
(@ServiceRequestID int,
@FileName nvarchar(150),
@Image varbinary(max))
AS
BEGIN
update ServiceRequest
set ImageFilename=@FileName, [Image]=@Image
where ID=@ServiceRequestID
END

ALTER PROCEDURE [dbo].[InsertSoundIntoServiceRequest] 
(@ServiceRequestID int,
@FileName nvarchar(150),
@Sound varbinary(max))
AS
BEGIN
update ServiceRequest
set SoundFilename=@FileName, Sound=@Sound
where ID=@ServiceRequestID
END

当我调试我的 ASP.net 应用程序时,我发现在保存声音文件的同时,InsertImageIntoServiceRequest 也被调用并且声音文件与图像文件重叠。

请提出一些建议。

【问题讨论】:

  • 我想再添加一件事。我通过会话变量将图像和声音文件传递给存储过程。
  • 这张表有触发器吗?
  • 当我尝试手动将数据添加到声音列时,它显示错误“您不能使用结果窗格将此字段数据设置为 NULL 以外的值”
  • 能否也给我们一些asp.net代码。

标签: sql-server binary-data


【解决方案1】:

@Saksham 我写了 3 种方法:一种用于插入图像和声音,另一种用于调用这两种方法。

[System.ComponentModel.DataObjectMethodAttribute (System.ComponentModel.DataObjectMethodType.Insert, false)] public bool InsertImage(int ServiceRequestID, string Filename, byte[] image) { 尝试 { int i = Adapter.InsertImageIntoServiceRequest(ServiceRequestID, Filename, image); 如果 (i > 0) 返回真; 返回假; } 抓住 { 返回假; } }

[System.ComponentModel.DataObjectMethodAttribute (System.ComponentModel.DataObjectMethodType.Insert, false)] public bool InsertSound(int ServiceRequestID, string Filename, byte[] sound) { 尝试 { string file = Filename.Replace(' ', '_'); int i = Adapter.InsertImageIntoServiceRequest(ServiceRequestID, 文件, 声音); 如果 (i > 0) 返回真; 返回假; } 抓住 { 返回假; } }

这里调用了这两个方法:

[System.ComponentModel.DataObjectMethodAttribute (System.ComponentModel.DataObjectMethodType.Insert, true)] public int CreateServiceRequest(string Username,string EMail,string CenterIPIN,int ServiceType,int ServiceStatus,string Notes, DataTable image, DataTable sound) { int rowsAffected; 尝试 { rowsAffected =(int)Adapter.CreateServiceRequest(Username, EMail, CenterIPIN, ServiceType, ServiceStatus, Notes);

        ServiceRequestBLL srb = new ServiceRequestBLL();
        if (image != null)
        {
            foreach (DataRow dr in image.Rows)
            {
                srb.InsertImage(rowsAffected, dr["Filename"].ToString(), (byte[])dr["Image"]);
            }
        }
        if (sound != null)
        {
            foreach (DataRow dr1 in sound.Rows)
            {
                try
                {
                    srb.InsertSound(rowsAffected, dr1["Filename"].ToString(), (byte[])dr1["Sound"]);
                }
                catch (Exception ex)
                {
                    rowsAffected = 0;
                }
            }
        }

    }
    catch
    {
        rowsAffected = 0;
    }

return rowsAffected = 1;

}

【讨论】:

  • 我已经解决了这个问题。这是我在 C# 代码中的错。无论如何,谢谢。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
相关资源
最近更新 更多