1. for循环中的存储过程如何显示到一个GridView中c#
你这样每次循环都会重新绑定的。肯定是只显示最后一个
你需要在外面建一个datatable dtTemp,
然后循环里 在 da.Fill(ds);后面 加一句 dtTemp.Merge(ds.Table[0]);
把结果集合并
最后在循环外面 GridView1.DataSource = dtTemp;
GridView1.DataBind();
这样就OK了
2. 用Qt做软件时,备份,导入数据库时候,进度条怎么弄
一、备份数据库1、打开sql企业管理器,在控制台根目录中依次点开MicrosoftSQLServer
2、SQLServer组-->双击打开你的服务器-->双击打开数据库目录
3、选择你的数据库名称(如论坛数据库Forum)-->然后点上面菜单中的工具-->选择备份数据库
4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份二、还原数据库1、打开SQL企业管理器,在控制台根目录中依次点开MicrosoftSQLServer
2、SQLServer组-->双击打开你的服务器-->点图标栏的新建数据库图标,新建数据库的名字自行取
3、点击新建好的数据库名称(如论坛数据库Forum)-->然后点上面菜单中的工具-->选择恢复数据库
4、在弹出来的窗口中的还原选项中选择从设备-->点选择设备-->点添加-->然后选择你的备份文件名-->添加后点确定返回,这时候设备栏应该出现您刚才选择的数据库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)-->然后点击上方常规旁边的选项按钮
5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置(也可以指定自己的目录),逻辑文件名不需要改动,移至物理文件名要根据你所恢复的机器情况做改动,如您的SQL数据库装在D:,那么就按照您恢复机器的目录进行相关改动改动,并且最后的文件名最好改成您当前的数据库名(如原来是bbs_data.mdf,现在的数据库是forum,就改成forum_data.mdf),日志和数据文件都要按照这样的方式做相关的改动(日志的文件名是*_log.ldf结尾的),这里的恢复目录您可以自由设置,前提是该目录必须存在(如您可以指定d:sqldatabs_data.mdf或者d:sqldatabs_log.ldf),否则恢复将报错
6、修改完成后,点击下面的确定进行恢复,这时会出现一个进度条,提示恢复的进度,恢复完成后系统会自动提示成功,如中间提示报错,请记录下相关的错误内容并询问对SQL操作比较熟悉的人员,一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误,数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作,如果还提示正在使用的错误可以将SQL服务停止然后重起看看,至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复三、收缩数据库一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开MicrosoftSQLServer-->SQLServer组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据四、设定每日自动备份数据库强烈建议有条件的用户进行此操作!
1、打开企业管理器,在控制台根目录中依次点开MicrosoftSQLServer-->SQLServer组-->双击打开你的服务器
2、然后点上面菜单中的工具-->选择数据库维护计划器
3、下一步选择要进行自动备份的数据-->下一步更新数据优化信息,这里一般不用做选择-->下一步检查数据完整性,也一般不选择
4、下一步指定数据库维护计划,默认的是1周备份一次,点击更改选择每天备份后点确定
5、下一步指定备份的磁盘目录,选择指定目录,如您可以在D盘新建一个目录如:d:databak,然后在这里选择使用此目录,如果您的数据库比较多最好选择为每个数据库建立子目录,然后选择删除早于多少天前的备份,一般设定4-7天,这看您的具体备份要求,备份文件扩展名一般都是bak就用默认的
6、下一步指定事务日志备份计划,看您的需要做选择-->下一步要生成的报表,一般不做选择-->下一步维护计划历史记录,最好用默认的选项-->下一步完成
7、完成后系统很可能会提示SqlServerAgent服务未启动,先点确定完成计划设定,然后找到桌面最右边状态栏中的SQL绿色图标,双击点开,在服务中选择SqlServerAgent,然后点击运行箭头,选上下方的当启动OS时自动启动服务
8、这个时候数据库计划已经成功的运行了,他将按照您上面的设置进行自动备份
修改计划:
1、打开企业管理器,在控制台根目录中依次点开MicrosoftSQLServer-->SQLServer组-->双击打开你的服务器-->管理-->数据库维护计划-->打开后可看到你设定的计划,可以进行修改或者删除操作五、数据的转移(新建数据库或转移服务器)一般情况下,最好使用备份和还原操作来进行转移数据,在特殊情况下,可以用导入导出的方式进行转移,这里介绍的就是导入导出方式,导入导出方式转移数据一个作用就是可以在收缩数据库无效的情况下用来减小(收缩)数据库的大小,本操作默认为您对SQL的操作有一定的了解,如果对其中的部分操作不理解,可以咨询动网相关人员或者查询网上资料
1、将原数据库的所有表、存储过程导出成一个SQL文件,导出的时候注意在选项中选择编写索引脚本和编写主键、外键、默认值和检查约束脚本选项
2、新建数据库,对新建数据库执行第一步中所建立的SQL文件
3、用SQL的导入导出方式,对新数据库导入原数据库中的所有表内容
3. 创建一个查询,查找01和03所属院系的选课学生信息怎么做
可以创建存储过程,名字设为 qT2 create proc qT2 @stuId int as begin select 姓名字段 as '姓名', 课程名字段 as '课程名', 成绩字段 as '成绩' from 表 end 若连表查询 则用内连接 或者 where 条件。
4. qt调用oracle存储过程,该怎么处理
qt调用oracle存储过程是通过QsqlQuery来实现的。
用法举例:
QSqlQuery movementQuery ;
movementQuery.prepare("call Qt.add_movement(:pDocumentType , :pDocumentId ,
to_date(sysdate,'dd-mm-yyyy') ,:pDocumentNumber"
",to_date(sysdate,'dd-mm-yyyy') , :pCustId ,:pMovementId ,:pReturn )");
movementQuery.bindValue(":pDocumentType",documentType);
movementQuery.bindValue(":pDocumentId",documentId);
movementQuery.bindValue(":pDocumentNumber",0);
movementQuery.bindValue(":pCustId",ui->custId->text());
movementQuery.bindValue(":pMovementId", 0, QSql::Out);
movementQuery.bindValue(":pReturn", "FALSE", QSql::Out);
movementQuery.exec();
//// The query executed the query is active and no errors are valid
//// message is method to display the value
message(query.boundValue(":pReturn").toString());
message(query.boundValue(5).toString());
message(query.boundValue(":pMovementId").toString());
message(query.boundValue(4).toString());
5. Qt存储过程,该怎么处理
----解决方案--------------------
单个输出参数没问题,就是多个不知道怎么办
------解决方案--------------------
以下是访问oracle存储过程的示例,多个输入、输出都可以。
QSqlQuery query(db);
if (!query.prepare("call test_out2(:p1,:p2,:out1,:out2)"))
{
return false;
}
query.bindValue(":p1", "abcd", QSql::In);
query.bindValue(":p2", "edfg", QSql::In);
QString t1(128,'\0'),t2(128,'\0');
query.bindValue(":out1", t1, QSql::Out);
query.bindValue(":out2", t2, QSql::Out);
if (!query.exec())
{
return false;
}
QString str1 = query.boundValue(":out1").toInt();
QString str2 = query.boundValue(":out2").toInt();
6. C++ qt 中 QSqlQuery建立对象后
QSqlQueryquery1(QString("SELECT*FROMplayList%1").arg(m_objIndex));
intfieldNo=query1.record().indexOf("songname");
while(query1.next())
{
QStringname=query1.value(fieldNo).toString();
list1<<name;
}
一个例子:如上你会明白你说错什么了
7. 在存储过程中,如何把smallint类型转换成char类型
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str();
8. 分页存储过程C# 代码
(1)size每页记录数(2)currIndex当前页(3)count总页数
分页的存储过程:
alter proc Select_Contradict
@qtbid varchar(5),
@qsid varchar(5),
@cid varchar(5),
@title varchar(50),
@htime varchar(50),
@size varchar(5),
@currindex varchar(5)
as
begin
declare @str varchar(700)
declare @where varchar(700)
set @where=''
set @str='select top '+@size+' tt.* from (select qtb.name qtbname,qs.name qsname,c.* from Contradict c inner join QuestionTypeBie qtb on c.qtbid=qtb.qtbid inner join QuestionState qs on c.qsid=qs.qsid) tt where 1=1'
if(@qtbid <> 0) set @where=@where+' and tt.qtbid=convert(int,'+char(39)+@qtbid+char(39)+')'
if(@qsid <> 0) set @where=@where+' and tt.qsid=convert(int,'+@qsid+')'
if(@cid <> 0) set @where=@where+' and tt.id=convert(int,'+@cid+')'
if(@title <> '') set @where=@where+' and tt.title like '+CHAR(39)+'%'+@title+'%'+CHAR(39)
if(@htime <> '') set @where=@where+' and DATEDIFF(DD,tt.HappenTime,'+char(39)+@htime+char(39)+')=0' --以上if为查询条件
set @currindex=@size*(@currindex-1) --筛选掉当前页之前的记录,因top后不能加括号,故这样写
set @where=@where+' and tt.id not in(select top '+@currindex+' tt.id from (select qtb.name qtbname,qs.name qsname,c.* from Contradict c inner join QuestionTypeBie qtb on c.qtbid=qtb.qtbid inner join QuestionState qs on c.qsid=qs.qsid) tt order by tt.id)' --分页的筛选条件
set @where=@where+' order by tt.id' --此order by 的字段需和前面的一致,否则分页效果不对
set @str=@str+@where
print @str
exec (@str)
end
1.select top (1)* from 表 where 条件 and id not in(select top (1)*((2)-1) id from 表 where 条件 order by 排序的字段) order by 排序的字段
2.在展示数据页面添加(1)(2)(3)属性
private int Size = 5;
public int currindex
{
set { ViewState["currindex"] = value; }
get { return Convert.ToInt32(ViewState["currindex"]); }
}
public int count
{
set { ViewState["count"] = value; }
get { return Convert.ToInt32(ViewState["count"]); }
}
3.查询总记录数给临时变量temp
//总个数
private int CountTemp()
{
return new ContradictManager().GetCount();
}
4.获取总页数
private int CountSize()
{
return count = (CountTemp() / Size) + (CountTemp() % Size > 0 ? 1 : 0);
}
5.绑定数据,dataSource=查询方法((1),(2))
6.设置上一页,下一页,(2)需要单击时++或--,执行3,4,5,6
if((2)>=(3)) //下一页不可用
if((2)<=1) //上一页不可用
7.页面首次加载事件:(2)=1;执行3,4,5,6
以上是我以前面试前总结准备的资料,按照这个流程分页绝对能搞定,但你要是看不懂我就没办法了
9. SQL server 能否将存储过程的结果插入临时表(列数不固定)
当前的做法是不行的:
1、语法是错误的。
-- INSERT INTO EXEC sp,这个语法肯定遇到报错了。
-- 要想作类似操作,至少也要将sp定义成“表值函数”才能将返回的结果值作直接调用
2、PIVOT出来的结果列,未必与预建的表,字段上匹配。
方案:
》在动态语句中,插入临时表。如果是sp中插入,则应为永久临时表 -- 否则调用者访问时已经被自动清除了。
10. 我现在有一个数据库存储过程,不知道写的对不对 也不知道怎么改,请求哪位大神帮我看看,可以有物质奖励
create PROCEDURE [dbo].[p]
@version bigint ,
@InvCode nvarchar(100)
AS
BEGIN
SET NOCOUNT ON;
with tb1 as
(
SELECT d.cInvCode,d.cInvName,a.Version ,
a.VersionDesc,a.VersionEffDate, c.free1 ,d.cInvStd,d.cInvAddCode ,
e.cComUnitName,a.CreateUser,a.CreateDate,a.ModifyUser,a.ModifyDate
FROM bom_bom a inner join bom_parent b on a.bomid =b.bomid INNER JOIN
bas_part c on b.parentId=c.partId INNER JOIN inventory d
on c.invcode=d.cinvcode INNER JOIN ComputationUnit e
on d.cComUnitCode=e.cComunitCode
WHERE 1=1 and d.cInvcode >= 'A05050053' and d.cInvcode <= 'A05050053'
)
,tb2 as
(
Select a.bomid ,c.InvCode, a.version from bom_bom a inner join bom_parent b on a.bomid =b.bomid inner join bas_part c on b.parentId=c.partId
)
,
tb3 as
(
Select a.SortSeq,a.OpSeq,c.cInvcode,c.cInvName,c.cInvStd, c.cInvAddCode,d.cComUnitName,a.BaseQtyN,a.BaseQtyD ,
a.CompScrap,Qty=a.BaseQtyN/a.BaseQtyD ,a.OpComponentId ,b.Free1,a.bomid FROM bom_opcomponent a inner join bas_part b
on a.componentId=b.partId INNER JOIN inventory c
on b.invcode=c.cinvcode INNER JOIN ComputationUnit d on c.cComUnitCode=d.cComunitCode
)
select * from tb3 inner join tb2 on tb3.bomid=tb2.bomid
inner join tb1 on tb2.version=tb1.version and tb2.InvCode=tb1.InvCode
where tb1.version=@version and tb1.InvCode=@InvCode
end
go