當前位置:首頁 » 服務存儲 » qt存儲過程結果集
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

qt存儲過程結果集

發布時間: 2022-05-24 04:50:16

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