现在的位置: 首页 > 综合 > 正文

工作中遭遇的问题及解决办法

2013年12月03日 ⁄ 综合 ⁄ 共 14291字 ⁄ 字号 评论关闭

85 对编辑框控件进行排序
 ctrl+D 依次点击排序

84 放到数组里或者hashmap里,循环比较;
   或者在任意值修改过的记个变量m_bEidt;
   也可以定义个结构体,把结构比较的单写个函数;

83 VC编辑框控件变量和String类型的变量有什么不同?
Value:值,变量的类型是值(字符串),那么用UpdateData(true)就可以得到EDIT里面的值
Control:控件,可以对其进行操作,如获取EDIT里面的资料可用   m_edit.GetDlgItemText(),
 

82 SQL中数字直接转成varchar到程序就不会变了
cast(a.系数 as varchar(10))

81 cast(生产周期 as nvarchar(50))

80 学生表(学号,姓名)
成绩表(课程名,学号,成绩)
编写SQL语句,查询每门课程的最高成绩,要求输出列为(课程名,学号,姓名,成绩)
 select 课程名,学号,姓名,成绩 from 成绩表 join 学生表 on 成绩表.学号=学生表.学号  group by 成绩表.课程名
 select 课程名,学号,姓名,max(成绩) from 成绩表 join 学生表 on 成绩表.学号=学生表.学号  group by  学生表.学号,学生表.姓名,成绩表.课程名
 select a.* from 成绩表 a where exists(select 1 from (select max([成绩]) as 成绩,[科目] from 成绩表 group by [成绩],[科目])b
 where a.[科目]=b.[科目] and a.[成绩]=b.[成绩])

79    select @Wait=COUNT(1) from BZ_预先发布表_在线 (nolock) where  处理状态='未处理'
   if(@@RowCount<>1 or @@error <> 0)
@@RowCount
就是最近一次查询 影响的行数
是个数据库的全局变量

78 一般多重循环用goto效率高
for(int i..)
{
   for(int j..)
   {
      if(..) goto exit;
    }
}
exit: ...

77 定义了标签+冒号 比如
a1: int a=0;
然后程序其他地方就可以 goto a1;

76  Update BZ_文章信息表 set 预先出版=COALESCE(预先出版,发布时间,@dtCutTime) where 文章编号=@Sn
 COALESCE ( expression [ ,...n ] )
 expression任何类型的表达式。   
 n表示可以指定多个表达式的占位符。
所有表达式必须是相同类型,或者可以隐性转换为相同的类型。
将相同的值作为 expression 返回。返回表达式中第一个非空表达式,
如有以下语句:
SELECT COALESCE(NULL,NULL,3,4,5) FROM dual   其返回结果为:3

75    INSERT INTO BZ_预先发布表_历史(序号, 任务性质, 报纸编号, 文章编号, 到岗时间, 制作方式, 机器人, 处理次数, 优先级, 开始时间, 提交时间, 加工说明, 加工备注, 来源岗位)
   select 序号, 任务性质, 报纸编号, 文章编号, 到岗时间, 制作方式, 机器人, 处理次数, 优先级, 开始时间, @dtCutTime, null, 加工备注, 来源岗位
   from BZ_预先发布表_在线  where 文章编号
=@Sn
and 到岗时间
=@Time

74 C# Replace 用法
stringObj.replace("aa","bb")
把stringObj中的aa替换为bb
这样的问题最好自己查阅MSDN,要学会自己学习

73 nodeField.SetAttribute("en","Y");
setAttribute是在某种缓存范围中设置具体的属性,底层原理是在四类Map中插入键值对关系。首先获取要插入数据的范围,例如request或者1楼哥们所说的session,当然还有其他两种。然后用setAttribute(attributeName,attributeValue);的格式插入数据,第一个参数是属性名,字符串类型的数据。,也是以后获取的依据条件,第二个是插入的数据,支持对象属性。获取时用getAttribute("attributeName")就行了。

72
   1    nPost=strValue.IndexOf("〖TP");
            if (nPost >= 0)
                return nPost;
            nPost = strValue.IndexOf("[tp");
        return nPost;
   2 int nPost = strValue.IndexOf("【TP");
return nPost >= 0 ? nPost : strValue.IndexOf("[tp");

71 删除combox下拉重复项
 int nIndex = m_comboType.FindString(1,"漏标");
 if (nIndex >= 0)
 {
  m_comboType.DeleteString(nIndex);
 } 

70 切图扫图 的来源岗位理论上只能是 '编辑选编'或'选编标引',取最后一条这两岗位的记录自然就是来源岗位.
   特殊情况下比如手工改的数据,没经过这两岗位
   select top 1 岗位名称 from BZ_加工历史表  with(nolock)  where 报纸   编号='TSSB20121218' and 岗位名称
   in ('编辑选编', '选编标引') order  by  到岗时间 desc

69 Update…From(很不幸,Sqlite是不支持的)
update  BZ_报纸登记表 with(rowlock)  set  编辑人员=RY_雇员检查视图.雇员账号,标引人=RY_雇员检查视图.姓名 from
RY_雇员检查视图
 where RY_雇员检查视图.岗位名称='编辑选编' and  BZ_报纸登记表.报纸编号='%s'  and 
RY_雇员检查视图.姓名='%s' ", strSn, strMan

68 NOLOCK可以忽略锁,直接从数据库读取数据。这意味着可以避开锁,从而提高性能和扩展性。但同时也意味着代码出错的可能性存在。你可能会读取到运行事务正在处理的无须验证的未递交数据。 这种风险可以量化。

67 ACM竞赛题

66 int CompareNoCase( LPCTSTR lpsz ) const; 这个函数使用lstrcmpi函数对一个CString和另一个CString进行比较。由参数lpsz指定这个用于比较的string。如果两个对象完全一致则返回0,如果小于lpsz,则返回-1,否则返回1.比如,利用CompareNoCase比较str与lpsz,等同于区分大小写比较str与lpsz的第一个相异字符,如果str该处的字符比lpsz大,则字符串str大于lpsz,返回1;如果str该处的字符比lpsz小,则字符串str小于lpsz,返回-1;str与lpsz内容完全一致则返回0。

65 select a.* from
(select *, ROW_NUMBER() OVER (partition by 岗位名称 order by 到岗时间 desc) as rownum
from dbo.CT_加工过程表) as a
where a.rownum = 1
order by 开始时间

partition by 岗位名称 order by 到岗时间
表示根据岗位名称分组(也可再加入分组列),在分组内部根据到岗时间排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

   分组排序
ROW_NUMBER() OVER (order by 到岗时间) as rownum

1 下载标引
2 下载标引
3 选编
4 标引检查

ROW_NUMBER() OVER (partition by 岗位名称 order by 到岗时间) as rownum

1 下载标引
2 下载标引
1 选编
1 标引检查
 
partition by 按岗位名称分组

64  ppdb->BeginTransaction();
 if(!ppdb->Execute((LPCTSTR)strSQL1))
 {
  ppdb->RollbackTransaction();
  return false;
 }
 if(!ppdb->Execute((LPCTSTR)strSQL2))
 {
  ppdb->RollbackTransaction();
  return false;
 }

 ppdb->CommitTransaction();

63 切图,扫图岗位:岗位数据来源分两种,一种是电子报,一种是纸质报,电子报责任岗位为选编标引,纸质报责任岗位为编辑选编

62 void *pRsNew;
   if(!MS_CreateRecordSet(GetDatabase(), &pRsNew))
   {
    AfxMessageBox("无法建立数据集!");
    return;
   }

61 select dbo.BZ_加工历史表.加工人名, dbo.BZ_加工历史表.报纸编号,dbo.BZ_报纸登记表.标引人,dbo.BZ_报纸登记表.收到日期
from dbo.BZ_加工历史表
inner join dbo.BZ_报纸登记表 on dbo.BZ_加工历史表.报纸编号 = dbo.BZ_报纸登记表.报纸编号
where dbo.BZ_报纸登记表.收到日期 >= '2013-01-01' and dbo.BZ_报纸登记表.标引人 = '高向婷'
and dbo.BZ_加工历史表.报纸编号 = 'cjjd20121227'

60 查看下载文件路径
select B.文件序号,B.文件名,B.扩展名,B.文件大小,B.修改时间,B.文件路径,A.相对路径 from PN_岗位文件表 A,PN_电子文件表 B
where A.岗位名称='备份' and A.编号=1012460497 and A.到岗时间='2012-12-06 17:05:06' and A.输入输出='输入' 
and A.文件序号=B.文件序号

59 备份下载,filesMan.Execute()执行成功,即bRet返回1,本地会成功新建光盘文件夹

58 排除LWSJ120976 LWSJ120188 LWSJ120079 LWSJ121243 LWSJ121264

select * from XW_岗位信息表_备份_光盘信息 where 光盘状态 = '待刻录' and CAST(RIGHT(光盘号, 4) as int)
not in (0976, 0188, 0079, 1243, 1264) order by 光盘号 desc

57 ODBC32.dll不能注册解决办法
(1)运行输入msconfig回车,打开系统配置实用程序,在启动项目中查找一个名为“****.dll”,如果有将它前面的钩去掉,然后按应用确定(如果没有跳过)。
(2)运行输入regedit回车打开注册表,选编辑查找一个名为“****.dll”的键值项,找到后删除,多查找几次删除干净,然后重新启动电脑即可。
(3)去掉自启动项 开始/运行输入regedit回车打开注册表编辑器,依次展开 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] 右侧, [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]在右侧, 看看有没有你要找的选项(****.dll),如果有删除,重启即可。
  如果上述方法无效,请修复一下系统:
  1)开机按F8不动到高级选项出现在松手,选“最近一次的正确配置”回车修复。
  2)请开机按F8进入到安全模式中用系统自带的系统还原,还原到你没有出现这次故障的时候修复。
  3)如果故障依旧,使用系统盘修复,打开命令提示符输入SFC /SCANNOW 回车(SFC和/之间有一个空格),插入原装系统盘修复系统,系统会自动对比修复的。
  4) 如果故障依旧,在BIOS中设置光驱为第一启动设备插入系统安装盘按R键选择“修复安装”即可。
  5)如果故障依旧,建议重装操作系统。

56 Xerces Panic Error 解决方法
   开始菜单 -> 运行 -> regedit.exe 删除注册表里的HKEY_CLASSES_ROOT\MIME\Database\Charset这个项就可以了,记得要全部删除哦!

55 报纸线install未能成功,替换C:\windows\*.ocx文件

   对于.ocx未能成功注册的解决方法

   vista 下 regsvr32 注册DLL时报0x8002801c 

老兄的本本用的vista系统,用建行网银出的E路护航软件,每次装成功了但进去做交易都提示未安装E路护航软件,就象没装这个东东一样,研究了一下,打算用regsvr32注册一下dll看,结果报错0x8002801c,网上搜了一下,都是英文的,没玩过vista,自己翻过来可能不准呵呵,大概看个意思吧:

  1)窗口+R,在输入框里输入 secpol.msc后确定运行

  2)“本地策略”下有一个“安全选项”

  3)在窗口右边,找到所有以“ User Account Control”开头的项(也有可能是“用户帐户控制”开头的),将每一项这些项后的security setting(安合设定)设成“禁用”或“未配置” (在属性里做修改)

  4)重新启动电脑

  5)窗口+R,在输入框里输入

regsvr32 c:\windows\system32\CCBNetSignCom.dll

54 ado2.h
  // 解决调存储过程, 内存泄露问题
 if(m_pParameter->Value.vt == VT_BSTR || m_pParameter->Value.vt == VT_NULL)
 ::SysFreeString(m_pParameter->Value.bstrVal);

53 查看exe文件中所用到的dll
   C:\Program Files\Microsoft Visual Studio\Common\Tools
 DEPENDS.EXE

52 inner join 显示两表中符合同一条件的记录
   full outer join 显示两表中所有记录
   left outer join 用于返回第1个表中的所有记录行以及第2个表中满足匹配条件的记录行
   right outer join 用于返回第2个表中的所有记录行以及第1个表中满足匹配条件的记录行
  

51 update BZ_文章信息表 set 页数 = ceiling(DATALENGTH(正文)/2554) where 页数 is  null

50 孙鑫第四课,画线
CDrawView::OnMouseMove()
{
CClientDC dc(this);
CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
if(m_bDraw == TRUE)
{
 dc.SetROP2(R2_BLACK);
 dc.MoveTo(m_ptOrigin);
 // dc.LineTo(point);
 dc.LineTo(m_ptOld);
 // dc.MoveTo(m_ptOrigin);
 dc.MoveTo(m_ptOld);
 dc.LineTo(point);
 // m_ptOrigin = point;
 m_ptOld = point;
}

49http://www.pudn.com/search_db.asp?keyword=VC
48 a 可以用消息队列,
   服务的话windows服务/webservice服务都行,看个人的习惯.
   最新的技术是wcf服务
   b 发送邮件的.NET下有相关的基本类库支持你可以看看。
     这个命名空间:System.Net.Mail
   c 你先调试发邮件的代码,等调试好了,在迁移到WCF或者WebService
   d 然后就可以开放给用户服务接口了。
   e 其实简单点说WCF或者WebService就是为了给网络上的用户开放接口。

47 ;with tbAll as
(select * from V_PN_文件信息视图 where 编号 in (select 编号 from V_BACKUP_正备份
where  光盘号 = 'lwsj121166') and 岗位名称 = '备份'),
tbNum as (select tbAll.*, ROW_NUMBER() OVER (partition by 编号 order by 编号) as rownum
from tbAll)
select * from tbNum where rownum = 1

46 ;with tbAll as
   (select * from V_PN_文件信息视图 where 编号 in (select 编号 from V_BACKUP_正备份
   where  光盘号 = 'lwsj121166') and 岗位名称 = '备份')
   ,tbDistinct as (select distinct 编号 from tbAll)
   SELECT a.编号, b.*
   FROM tbDistinct a
   OUTER APPLY (SELECT TOP 1 * FROM tbAll WHERE 编号 = a.编号) b

45http://c.chinaitlab.com/cc/example/List_19.html
C++实例编程

44 在需要换行的字符前增加\r\n,可以实现换行

43 (float)((int)(f*100+0.5))/100.0
   float a=atof(m_strAvgWorkPeriod);
   stmpField.Format("%.4f",a);

42 if语句里做判断,常量最好放前面以防止if(x=1),而反过来if(1=x)编译不能通过 

41 显示对话框只需定义它的对象,使用DoModel方法就可显示

40 对话框控件在使用默认ID名字时,不能使用Ctrl+W新建变量,修改ID名字即可

39 ADOCommand控件不能返回记录集,它的作用仅是执行一条SQL语句!
 若要返回记录集,可用ADOQuery、ADOProc、ADOTable等可以返回记录集的控件。

 CString sExtClause, sFileExtClause;
 比如, 要下载"自动标引"岗位的所有PDF,TIF...文件和编号为"123456789"的所有PDF, TIF文件
 那就要用两个SQL来做
 于是
 SQLPrefix = "SELECT * FROM TABLENAME WHERE 岗位名称 = '自动标引'"
 SQL1 = SQLPrefix + sExtClause;
 SQL2 = SQLPrefix + sFileExtClause;

 if(strTaskKind == "PDF")
 {
 sExtClause.Format("and (扩展名 = 'PDF' or 扩展名 = 'TIF' or 扩展名 = 'KDH' or 扩  展名 = 'SAV' or 扩展名 = 'XML')");
 sFileExtClause.Format("and (文件名 like '%%%ld.pdf' or 文件名 like '%%%ld.tif'  or 文件 名 like '%%%ld.kdh' or 文件名 like '%%%ld.sav'\
 or 文件名 like '%%%ld.xml')", (long)nSN, (long)nSN, (long)nSN, (long) nSN, (long)nSN);
 }
 else if(strTaskKind == "TIF")
 {
  sExtClause.Format("and (扩展名 = 'TIF' or 扩展名 = 'NH' or 扩展名 = 'SAV' or 扩 展名 = 'XML')"); 
  sFileExtClause.Format("and (文件名 like '%%%ld.tif' or 文件名 like '%%%ld.nh' or  文件名 like '%%%ld.sav' or 文件名 like '%%%ld.xml')",
   (long)nSN, (long)nSN, (long)nSN, (long)nSN);
 }
  CString sSql;

 如果要检索字段中包含一部分内容,就要以Like做检索, 通常是 Like '%内容%'
 就是说字段中含有"内容"二字的话, 就都能检出来
 一般来说, 用Like检索的话, 是相当慢的
 但是, 如果在确切的知道, "内容"是在字段值的前面或是后面的话, 就可以只有前匹配和后匹配
 Like '%内容'
 这个表示,"内容'是在字段值的最后面
 同样的, Like '内容%' , 表示"内容"是在字段值的最前面, 这样就会要比 Like '%内容%'要快得多
 

38 select sum(cast(文件大小 as bigint)) from V_PN_文件信息视图 with (nolock) where  输入输出 = '   输入' and 岗位名称 = '备份' and
  文件状态 = '存在' and 编号 in (select 编号 from XW_岗位信息表_备份_光盘信息 where 光盘号 =     'LWSJ121071')
  select cast(sum(文件大小) as bigint)
  decimal(38,0)

37 private static string GetWordContent
 静态方法不用实例化 函数就可以用
 否则话 需要这么用
 Helper helper = new Helper();
 helper.GetWodContet("123")

36 备份机器人增加逻辑
 可以加一个,从库里拿到文件大小,进行判断,然后下载,下载下来后再检测一下本地的文件大小是不是库里的值
 两个大小比较不一致的话这条就报出来

35 datediff(ww,[统计日期],getdate())=1

34 select a列,b列,a列+b列 as a+b的和 from 表
这里限于a,b列都是数值类型,如果是字符串需要处理。
   select sum(a+b) as c from table

33 m_btnSave.ShowWindow(SW_HIDE); // 隐藏按钮
   m_btnSave.ShowWindow(SW_SHOW); // 显示按钮
   m_btnPre.SetIcon(IDI_PRE); // 设置图标
   m_btnPre.EnableWindow(FALSE); // 窗口置灰
   m_btnPre.EnableWindow(TRUE); // 可用

32 将表B的数据追加进表A
 APPEND FROM d:\jlrb20120419.dbf(B表)

31 只显示小数点后的两位
 cast(最大加工周期 as decimal(10,2))

30  char szBuf[10];
 itoa(strXBTS, szBuf, 10);

29 CString sTmp;
 sTmp.Format("下载图片数: %d, 下载标记数: %d, 不一致, 无法保存!", m_nPicDownCount, nDownCount);
 AfxMessageBox(sTmp);

28 SELECT 文章编号 FROM BZ_文章信息表 where 报纸编号 = '"+m_strNewsNum+"' and 文章编号 <> '"+strFileNum+"' and left(cast(正文 as char(60)), 25) = '"+MyLeft(strContent, 25)+"';

27 光盘号 in 'LWSJ120235' and 'LWSJ120241'
 select * from XW_岗位信息表_备份_光盘信息 where cast(right(光盘号,3) as int) between 235 and 241

 
1 跨工程调用类中方法?
 *只在头文件里增加路径
 *头文件引用
 *那用就在那写,如果有dll要加lib引用
 *加在StdAfx.h是这个工程里可以用,
 *加在某个类里,只有这个类可以用
2 获取表头字段总数
  int nFieldCount = MS_GetFieldCount(pRs);
  取记录
 MS_Open(pRs,strSql)
  字段名
 MS_GetFieldName(pRs, i, szBuf)
  行数
 MS_GetRecordCount(pRs)
3 HMENU Handle to a menu.
  CMenu类是封装的Windows HMENU 。它提供了成员函数,用于创建,跟踪,更新和销毁菜单。
4 & &&
  if(a&b){
 //如果a满足条件,b不满足条件,还是会执行if里的内容
  }
  if(a&&b){
 //a和b的条件都满足时,才会执行if里的内容
  }
  &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。
  if(expression1 & expression2){}
 中expression1 和expression2 无论expression1返回true还是false,都会继续判断expression2的返回值
  if(expression1 && expression2){}
 中如果expression1 返回false,那么expression2 不执行,跳出if语句,
    如果expression1 返回true,继续判断expression2

切图线
5 遇到报线程错误一般是文件服务器网络不通了

机器人
6 造成下载文件数,与光盘信息表本数,不一致
  可能的原因
 库缺文件,或有重复
 

那就是判断该继续下刚才那张盘还是另起新盘的地方有问题
应该有个地方判断当前下载目录的容量,满了就不继续往里放

7 Cannot access the ClassView information file. ClassView informaion will not be available.
解决办法:关闭工程,删除clw,ncb文件,重新打开,将自动生成ClassView 文件

8 内存不能为只读
解决办法:注册所有dll文件,开始-运行, 输入“cmd ”回车在命令提示符下输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车
完成后,再输入下面
for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i回车
以及运行install.bat,重启电脑

9 .ncb .aps .clw .plg .opt  .pch都可以直接删除

10.有些文档加工的时候就缺了东西

机标机器人
11. ExtractWord.DLL没有debug版的dll,用release调试就可以

12. unicode的映射表是字体字典的一部分,缺了这个,就可能会导致乱码,是PDF里面的东西

13. inner join 用法
SELECT dbo.BZ_文章信息表.正标题, dbo.BZ_文章信息表.副标题, dbo.BZ_文章信息表.正文, dbo.BZ_报纸登记表.出版日期, dbo.BZ_报纸协议库.CN, dbo.BZ_文章信息表.文章编号, dbo.BZ_文章信息表.报纸编号, dbo.BZ_报纸登记表.报纸中文名, '' AS 分类号
FROM dbo.BZ_报纸登记表 INNER JOIN dbo.BZ_文章信息表 ON dbo.BZ_报纸登记表.报纸编号 = dbo.BZ_文章信息表.报纸编号 INNER JOIN
                      dbo.BZ_报纸协议库 ON dbo.BZ_报纸登记表.邮发号 = dbo.BZ_报纸协议库.邮发号

14. select * from  TableName   with (nolock);
 在写查询语句的时候表名后面写上 with (nolock),这样表不容易死锁

15 两个类中定义变量时,用相同的名字,不会受影响
   两个类中使用第三个类的一个变量,不会有影响

16 存储过程,函数,游标,临时表,CTE
   cte 公用表达式

   游标就是一行一行的查询

   ;with A as (select *from test)
   select *From A
   A是一个公用表达式
   在接下来的SQL语句中可以直接用

17 C#调用外部dll,摘自机标机器人FormAuto.cs
 [DllImport("ExtractWord.DLL", EntryPoint = "Extract_Word_Initial", SetLastError = true, CharSet = CharSet.Ansi,    ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
 public static extern int Extract_Word_Initial(int language, bool delsim);   
 int nRet = Extract_Word_Initial(1, true);

18 时间戮是指文件属性里的创建、修改、访问时间。

19 数字签名 以电子形式存在于数据信息之中的,或作为其附件的或逻辑上与之有联系的数据,可用于辨别数据签署人的身份,并表明签署人对数据信息中包含的信息的认可。  
  
20 pch预编译头文件(precompiled headers)

21 异常有8种
        // Exceptions:
        //   System.IO.IOException:
        //     The destination file already exists.
        //
        //   System.ArgumentNullException:
        //     sourceFileName or destFileName is null.
        //
        //   System.ArgumentException:
        //     sourceFileName or destFileName is a zero-length string, contains only white
        //     space, or contains invalid characters as defined in System.IO.Path.InvalidPathChars.
        //
        //   System.UnauthorizedAccessException:
        //     The caller does not have the required permission.
        //
        //   System.IO.FileNotFoundException:
        //     sourceFileName was not found.
        //
        //   System.IO.PathTooLongException:
        //     The specified path, file name, or both exceed the system-defined maximum
        //     length. For example, on Windows-based platforms, paths must be less than
        //     248 characters, and file names must be less than 260 characters.
        //
        //   System.IO.DirectoryNotFoundException:
        //     The path specified in sourceFileName or destFileName is invalid, (for example,
        //     it is on an unmapped drive).
        //
        //   System.NotSupportedException:
        //     sourceFileName or destFileName is in an invalid format.

22      关于使用异常的例子
         try
                {
                    File.Move("", "");
                }
                catch (DirectoryNotFoundException)
                {
                    // 目录不存在
                }
                catch (FileNotFoundException)
                {
                    // 文件不存在
                }
                catch (Exception ex)
                {
                    // 其他问题
                    string error = ex.Message;
                }
  一个try可以做多个catch
  catch里面还可以放try catch

23 取编号, 作者姓名, 导师, 中文题名,但那重复的记录除了编号不同,其它都一样的,用中文题名排重
;with tb_tmp as
(select distinct 编号, 中文题名 from table)
select 编号, 中文题名, 作者姓名, 导师 from table as t
inner join tb_tmp on tb_tmp.编号 = t.编号
 order by 作者姓名

;with tb_tmp as
(select distinct 编号, 中文题名 from table)
select t.编号, t.中文题名, t.作者姓名, t.导师 from table as t
inner join tb_tmp on tb_tmp.编号 = t.编号
 order by t.作者姓名

24 inner join用法举例
 SELECT a.报纸编号, a.到岗时间, a.制作方式, a.加工人名, a.加工状态, b.文章编号, b.正标题, b.副标题, b.引题
 FROM dbo.BZ_加工历史表 AS a INNER JOIN
 dbo.BZ_文章信息表 AS b ON a.报纸编号 = b.报纸编号 AND LEFT(a.制作方式, 2) = b.制作方式
 WHERE     (a.岗位名称 = '标引质检')
 AND (CASE WHEN len(a.制作方式) = 2 THEN (b.需补图数 = 0)
 ELSE (b.需补图数 > 0)END)

25 union all用法举例
 SELECT 文章编号,a.制作方式,正标题,引题,副标题,作者机构,栏目,正文,文献类型,语种,版次,抽检时间 FROM BZ_文章信息表 a \
 where a.报纸编号='%s' and a.制作方式='%s' AND a.需补图数%s0  and a.命中否=1 and 文章编号 in \
 (select 文章编号 from BZ_报纸错误记录表 e, V_BZ_版式质检_最后时间 f where e.发现岗位='%s' AND  e.报纸编号='%s'
 and e.制作方式='%s' and e.到岗时间= f.到岗时间 and e.报纸编号=f.报纸编号 and e.制作方式=f.制作方式) \
 union all select 文章编号,制作方式,正标题,引题,副标题,作者机构,栏目,正文,文献类型,语种,版次,抽检时间 FROM BZ_文章信息表   where 报纸编号='%s' and 制作方式='%s' AND 需补图数%s0 and 命中否=1 and 抽检时间='%s'"

26 查询多表
 select b.文章编号,b.总图数, b.需补图数, b.正标题 from BZ_报纸加工表 a, BZ_文章信息表 b where 1<>1

抱歉!评论已关闭.