update 二进制image失败

qq_34470481 2016-04-14 12:28:45
表单结构如下
USE [TOOLSYS]
GO
/****** 对象: Table [dbo].[SoftwareList] 脚本日期: 04/14/2016 12:31:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[SoftwareList](
[ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[Platform] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[ProductionPhase] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[StationName] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[SoftwareName] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Version] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Size] [int] NOT NULL,
[Binary] [image] NULL,
[Remark] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL,
[DateTimes] [datetime] NOT NULL CONSTRAINT [DF_SoftwareList_DateTimes] DEFAULT (getdate()),
CONSTRAINT [PK_SoftwareList] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
SET ANSI_PADDING OFF



		//上传
char *pBuf = m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];


if (pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement(psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
((CToolManagementApp *)AfxGetApp())->m_pRst->GetFields()->GetItem("Binary")->AppendChunk(varBLOB);
}

((CToolManagementApp *)AfxGetApp())->m_pRst->Update();

if (((CToolManagementApp *)AfxGetApp())->m_pRst->State)
((CToolManagementApp *)AfxGetApp())->m_pRst->Close();
}
catch (_com_error e)
{
this->InsertListInfo(_T("Image insert into database failed..."), 1);
return FALSE;
}



上面的上传代码在A服务器上可以成功,B服务器上失败 (AB都是SQL2005)
其他SQL语句都没问题就update image有问题,反向解析image也没问题
一开始以为是表单问题,后来直接从A数据库备份到B数据库,结果还是失败,各位大神知道是什么原因么,
...全文
144 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2016-04-15
  • 打赏
  • 举报
回复
请问问题解决了没?如何解决的,分享一下..
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
所以 SQL Profiler 没有抓到 失败时候的log
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复

    //上传
    char            *pBuf = m_pBMPBuffer;
    VARIANT            varBLOB;
    SAFEARRAY        *psa;
    SAFEARRAYBOUND    rgsabound[1];
 
 
    if (pBuf)
    {
        rgsabound[0].lLbound = 0;
        rgsabound[0].cElements = m_nFileLen;
        psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
        for (long i = 0; i < (long)m_nFileLen; i++)
            SafeArrayPutElement(psa, &i, pBuf++);
        varBLOB.vt = VT_ARRAY | VT_UI1;
        varBLOB.parray = psa;
         //在这里加了断点,发现SQL Profiler log 在这之后就没生成了
        ((CToolManagementApp *)AfxGetApp())->m_pRst->GetFields()->GetItem("Binary")->AppendChunk(varBLOB);
    }
 
    ((CToolManagementApp *)AfxGetApp())->m_pRst->Update();
 
    if (((CToolManagementApp *)AfxGetApp())->m_pRst->State)
        ((CToolManagementApp *)AfxGetApp())->m_pRst->Close();
}
catch (_com_error e)
{
    this->InsertListInfo(_T("Image insert into database failed..."), 1);
    return FALSE;
}
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
引用 14 楼 ap0405140 的回复:
[quote=引用 12 楼 qq_34470481 的回复:]
我先百度学一下SQL Profiler工具有log了再传上来

跟踪到SQL语句之后,先对比与A服务器上产生的SQL有何不同.[/quote]

ADATABASE 成功


BDATABASE 失败


圈中部分应该是执行((CToolManagementApp *)AfxGetApp())->m_pRst->Update();的log


很奇怪的是B执行完了以后不仅失败,而且其他SQL语句都失败像断开链接了似得
唐诗三百首 2016-04-14
  • 打赏
  • 举报
回复
条件: TextData(即SQL语句)中同时含有表名(SoftwareList)和字段名(Binary)的,
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
我先百度学一下SQL Profiler工具有log了再传上来
唐诗三百首 2016-04-14
  • 打赏
  • 举报
回复
引用 12 楼 qq_34470481 的回复:
我先百度学一下SQL Profiler工具有log了再传上来
跟踪到SQL语句之后,先对比与A服务器上产生的SQL有何不同.
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
引用 8 楼 ap0405140 的回复:
关键是跟踪到更新SoftwareList表Binary字段的那句SQL, 2个文件好像都没找到.




不太会设置,在哪筛选啊
唐诗三百首 2016-04-14
  • 打赏
  • 举报
回复
你的核心问题是"update image有问题"是吧? 所以关键是查这个步骤对应的SQL.
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
引用 8 楼 ap0405140 的回复:
关键是跟踪到更新SoftwareList表Binary字段的那句SQL, 2个文件好像都没找到.
我再试试
唐诗三百首 2016-04-14
  • 打赏
  • 举报
回复
关键是跟踪到更新SoftwareList表Binary字段的那句SQL, 2个文件好像都没找到.
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
A和B服务器都是在A上面执行和跟踪的
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
引用 5 楼 ap0405140 的回复:
配合SQL Profiler工具跟踪一下对应后台执行了什么SQL? 然后手工执行一下,并与服务器A上执行的SQL的对比一下..
跟踪出来了, ADATABASE.trc明显比BDATABASE.trc多很多,不是很会看,请帮忙看看 http://pan.baidu.com/s/1qYIeVIc
唐诗三百首 2016-04-14
  • 打赏
  • 举报
回复
配合SQL Profiler工具跟踪一下对应后台执行了什么SQL? 然后手工执行一下,并与服务器A上执行的SQL的对比一下..
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
引用 3 楼 ap0405140 的回复:
既然A服务器ok, B服务器不ok, 应该是B服务器的问题... 请问有详细的错误信息吗?
这个没法用查询分析器执行,所以不知道是什么错误,但能肯定的是执行 ((CToolManagementApp *)AfxGetApp())->m_pRst->Update();这条语句出错了 结果返回 this->InsertListInfo(_T("Image insert into database failed..."), 1); return FALSE;
唐诗三百首 2016-04-14
  • 打赏
  • 举报
回复
既然A服务器ok, B服务器不ok, 应该是B服务器的问题... 请问有详细的错误信息吗?
qq_34470481 2016-04-14
  • 打赏
  • 举报
回复
BAN
引用 1 楼 ap0405140 的回复:
检查B服务器是否有安装SQL2005 SP4补丁.
没装,但是我其他服务器SQL都没装啊
唐诗三百首 2016-04-14
  • 打赏
  • 举报
回复
检查B服务器是否有安装SQL2005 SP4补丁.

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧