當前位置:首頁 » 編程語言 » sqlserver調用c
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserver調用c

發布時間: 2022-04-11 14:03:23

A. C#怎麼調用sqlserver的自定義函數

sql server 自定義函數的使用
自定義函數

用戶定義自定義函數像內置函數一樣返回標量值,也可以將結果集用表格變數返回
用戶自定義函數的類型:
標量函數:返回一個標量值
表格值函數{內聯表格值函數、多表格值函數}:返回行集(即返回多個值)

1、標量函數
Create function 函數名(參數)
Returns 返回值數據類型
[with {Encryption | Schemabinding }]
[as]
begin
SQL語句(必須有return 變數或值)

End

Schemabinding :將函數綁定到它引用的對象上(註:函數一旦綁定,則不能刪除、修改,除非刪除綁定)


Create function AvgResult(@scode varchar(10))
Returns real
As
Begin
Declare @avg real
Declare @code varchar(11)
Set @code=@scode + 『%』
Select @avg=avg(result) from LearnResult_jiali
Where scode like @code
Return @avg
End

執行用戶自定義函數
select 用戶名。函數名 as 欄位別名
select dbo.AvgResult(『s0002』) as result

用戶自定義函數返回值可放到局部變數中,用set ,select,exec賦值
declare @avg1 real ,@avg2 real ,@avg3 real
select @avg1= dbo.AvgResult(『s0002』)
set @avg2= dbo.AvgResult(『s0002』)
exec @avg3= dbo.AvgResult 『s0002』
select @avg1 as avg1 ,@avg2 as avg2 ,@avg3 as avg3

函數引用

create function code(@scode varchar(10))
returns varchar(10)
as
begin
declare @ccode varchar(10)
set @scode = @scode + 『%』
select @ccode=ccode from cmessage
where ccode like @scode
return @ccode
end

select name from class where ccode = dbo.code(『c001』)

2、表格值函數
a、 內聯表格值函數
格式:
create function 函數名(參數)
returns table
[with {Encryption | Schemabinding }]
as
return(一條SQL語句)

create function tabcmess(@code varchar(10))
returns table
as
return(select ccode,scode from cmessage where ccode like @ccode)

b、 多句表格值函數
create function 函數名(參數)
returns 表格變數名table (表格變數定義)
[with {Encryption | Schemabinding }]
as
begin
SQL語句
end

多句表格值函數包含多條SQL語句,至少有一條在表格變數中填上數據值
表格變數格式
returns @變數名 table (column 定義| 約束定義 [,…])
對表格變數中的行可執行select,insert,update,delete , 但select into 和 insert 語句的結果集是從存儲過程插入。

Create function tabcmessalot (@code varchar(10))
Returns @ctable table(code varchar(10) null,cname varchar(100) null)
As
Begin
Insert @ctable
Select ccode,explain from cmessage
Where scode like @code
return
End

Select * from tabcmessalot(『s0003』)

來自:http://hi..com/datachina/blog/item/801def0366c4e7ea09fa9344.htmlC#調用SQL自定義函數返回值

代碼
1 --SQL自定義函數:
2
3 CREATE FUNCTION [GetProjectID] (@headStr nvarchar(10),@date datetime)
4 )
5
6 RETURNS NVARCHAR(200)
7
8 AS
9
10 BEGIN
11
12 --不能在自定義函數中用INSERT INTO
13
14 --insert into emos_cust(cust_name,dates)values(
15
16 --@headStr,@date
17
18 --)
19
20 return 'TEST BY HANSHU'
21 END
代碼
1 /// <summary>
2 /// 獲取項目文件編號 塗聚文
3 /// </summary>
4 private void FileNo()
5 {
6
7 SqlConnection conn = new SqlConnection(connectionString);
8 string strSql = "GetProjectID"; //自定SQL函數
9 SqlCommand cmd = new SqlCommand(strSql, conn);
10 cmd.CommandType = CommandType.StoredProcere;
11 cmd.Parameters.Add("@headStr", SqlDbType.NVarChar).Value = "ZQ3"; //輸入參數
12 cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = System.DateTime.Now.ToShortDateString(); //輸入參數
13 cmd.Parameters.Add("@returnString", SqlDbType.NVarChar);
14 cmd.Parameters["@returnString"].Direction = ParameterDirection.ReturnValue; //返回參數
15 try
16 {
17 conn.Open();
18 object o= cmd.ExecuteScalar();
19
20 this.txtAFileNO.Text = cmd.Parameters["@returnString"].Value.ToString();
21
22 //Response.Write("");
23
24 }
25 catch (Exception ex)
26 {
27
28 this.txtAFileNO.Text = ex.Message;
29
30 }
31 finally
32 {
33
34 if (!(conn.State == ConnectionState.Closed))
35 {
36
37 conn.Close();
38
39
40 }
41
42 }
43
44
45 }

B. 如何在linux下用C 或者C++連接sqlserver

ListViewer listViewer;
public static class Language {
public String genre;
public boolean isObjectOriented;

public Language() { }
public Language(String genre, boolean isObjectOriented) {
this.genre = genre;
this.isObjectOriented = isObjectOriented;
}

C. c++與sqlserver資料庫怎樣連接

HRESULThr=sqlSp.CreateInstance(_uuidof(Connection));

if(FAILED(hr))

{

AfxMessageBox("_ConnectionPtr對象指針實例化失敗!!!");

return;

}

else{

try{

_bstr_tstrConnect="Driver={sqlserver};server=192.168.1.29;uid=sa;pwd=ebank@123;database=baoshang;";

sqlSp->Open(strConnect,"","",adModeUnknown);

}

catch(_com_error&e)

{

AfxMessageBox(e.Description());

return;

}

_RecordsetPtrm_pRecordset;

if(FAILED(m_pRecordset.CreateInstance(_uuidof(Recordset))))

{

AfxMessageBox("記錄集對象指針實例化失敗!");

return;

}

try{

m_pRecordset->Open("select*fromdbo.TB_DICT_CONTTYPE",(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic,adCmdText);

}

catch(_com_error&e)

{

AfxMessageBox(e.Description());

return;

}

try{

m_pRecordset->MoveFirst();

while(!m_pRecordset->adoEOF)

{

CStringinsertTime=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("F_TYPE_ID"))->Value);

AfxMessageBox(insertTime);

m_pRecordset->MoveNext();

}

}

catch(_com_error&e)

{

AfxMessageBox(e.Description());

return;

}

}

(3)sqlserver調用c擴展閱讀

連接資料庫三支路

1、導入資料庫命名空間:

usingSystem.Data.SqlClient;

2、創建資料庫連接對象,並指定資料庫連接字元串:

//創建資料庫連接對象:SqlConnectionconn=newSqlConnection(str);

//資料庫連接字元串:Stringstr="DataSource=.;InitialCatalog=test;IntegratedSecurity=True";

3、打開與資料庫的連接:

Open.conn();

4、創建操作命令對象Command,並指定操作數據源以及操作命令:

//創建操作命令對象:SqlCommandcmd=newSqlCommand();

//操作數據源:cmd.Connection=conn;

//操作命令:cmd.CommandText="selectcount(*)fromuser_tablewhereuserName='"+uName+"'anserPwd='"+uPwd+"'";

D. VC中如何執行SQL語句(用SQLServer的數據源)

使用 ADODB.Command 來調用存儲過程,如:

Dim adoComm As Object
'// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
'// 設置連接,假設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
'// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
'// 存儲過程名稱
.CommandText = "你的存儲過程名稱"
'// 設置輸入參數
.Parameters.Item("@輸入參數").Value = "值"
'// 執行存儲過程
.Execute

If .Parameters.Item("@返回參數名稱").Value = True Then

Else

End If
End With
'// 釋放對象
Set adoComm = Nothing

E. 如何用C++連接SQL資料庫

(樓上兩位說的很對,我給你粘一篇文章吧 初學者 看看有好處。
需要的話 你可以留下郵箱 我這有一些初學者的文檔可以發給你很不錯,希望繼續努力。面試,到時候一切都是是浮雲。。。哈哈)

基本流程
萬事開頭難,任何一種新技術對於初學者來說最重要的還是「入門」,掌握其要點。讓我們來看看ADO資料庫開發的基本流程吧!
(1)初始化COM庫,引入ADO庫定義文件
(2)用Connection對象連接資料庫
(3)利用建立好的連接,通過Connection、Command對象執行SQL命令,或利用Recordset對象取得結果記錄集進行查詢、處理。
(4)使用完畢後關閉連接釋放對象。

准備工作:
為了大家都能測試本文提供的例子,我們採用Access資料庫,您也可以直接在我們提供的示例代碼中找到這個test.mdb。
下面我們將詳細介紹上述步驟並給出相關代碼。
【1】COM庫的初始化
我們可以使用AfxOleInit()來初始化COM庫,這項工作通常在CWinApp::InitInstance()的重載函數中完成,請看如下代碼:

BOOL CADOTest1App::InitInstance()
{
AfxOleInit();
......

【2】用#import指令引入ADO類型庫
我們在stdafx.h中加入如下語句:(stdafx.h這個文件哪裡可以找到?你可以在FileView中的Header Files里找到)

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
這一語句有何作用呢?其最終作用同我們熟悉的#include類似,編譯的時候系統會為我們生成msado15.tlh,ado15.tli兩個C++頭文件來定義ADO庫。

幾點說明:
(1) 您的環境中msado15.dll不一定在這個目錄下,請按實際情況修改
(2) 在編譯的時候肯能會出現如下警告,對此微軟在MSDN中作了說明,並建議我們不要理會這個警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned

【3】創建Connection對象並連接資料庫
首先我們需要添加一個指向Connection對象的指針:
_ConnectionPtr m_pConnection;
下面的代碼演示了如何創建Connection對象實例及如何連接資料庫並進行異常捕捉。

BOOL CADOTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象
if(SUCCEEDED(hr))
{
hr = m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///連接資料庫
///上面一句中連接字串中的Provider是針對ACCESS2000環境的,對於ACCESS97,需要改為:Provider=Microsoft.Jet.OLEDB.3.51;
}
}
catch(_com_error e)///捕捉異常
{
CString errormessage;
errormessage.Format("連接資料庫失敗!\r\n錯誤信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///顯示錯誤信息
}

在這段代碼中我們是通過Connection對象的Open方法來進行連接資料庫的,下面是該方法的原型
HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options )
ConnectionString為連接字串,UserID是用戶名, Password是登陸密碼,Options是連接選項,用於指定Connection對象對數據的更新許可權,
Options可以是如下幾個常量:
adModeUnknown:預設。當前的許可權未設置
adModeRead:只讀
adModeWrite:只寫
adModeReadWrite:可以讀寫
adModeShareDenyRead:阻止其它Connection對象以讀許可權打開連接
adModeShareDenyWrite:阻止其它Connection對象以寫許可權打開連接
adModeShareExclusive:阻止其它Connection對象以讀寫許可權打開連接
adModeShareDenyNone:阻止其它Connection對象以任何許可權打開連接

我們給出一些常用的連接方式供大家參考:
(1)通過JET資料庫引擎對ACCESS2000資料庫的連接

m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown);

(2)通過DSN數據源對任何支持ODBC的資料庫進行連接:

m_pConnection- >Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown);

(3)不通過DSN對SQL SERVER資料庫進行連接:
m_pConnection- >Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","",adModeUnknown);

其中Server是SQL伺服器的名稱,DATABASE是庫的名稱

Connection對象除Open方法外還有許多方法,我們先介紹Connection對象中兩個有用的屬性ConnectionTimeOut與State
ConnectionTimeOut用來設置連接的超時時間,需要在Open之前調用,例如:
m_pConnection- >ConnectionTimeout = 5;///設置超時時間為5秒
m_pConnection- >Open("Data Source=adotest;","","",adModeUnknown);

State屬性指明當前Connection對象的狀態,0表示關閉,1表示已經打開,我們可以通過讀取這個屬性來作相應的處理,例如:

if(m_pConnection- >State)
m_pConnection- >Close(); ///如果已經打開了連接則關閉它

------------------------------------------------------------------------------------
呵呵,是啊,我以前不做VC的,所以這次老闆有個項目要做,沒辦法啊!!以後多請教啊!!
------------------------------------------------------------------------------------
你現在不少基礎的不會,上來就連接資料庫有點難
------------------------------------------------------------------------------------
要是你用vc6,就右健點擊要添加變數的控制項,選擇classwizard,選擇member variables選項卡,它會自動指到你想要添加變數的控制項,你直接點選擇add variable,起個名字就可以了
------------------------------------------------------------------------------------
我關鍵是不知道怎麼給控制項添加與之相對應的變數!!請明示啊!!
------------------------------------------------------------------------------------
CBaseEditBox是什麼東西?你不要這樣定義。應該先把控制項放在對話框窗體上,再給這個控制項添加與之相對應的變數,這樣,VC就自動把控制項和變數聯系起來了
------------------------------------------------------------------------------------
剛弄,不怎麼會,請明示!!!

我想把從資料庫中讀出來的記錄放在一個文本框中!

然後在界面上放置了一個edit box

我在類C***Dlg中添加了變數
public:
CBaseEditBox m_list

接下來我在一個按鈕的onOK事件里連接資料庫並想把得到的記錄放到m_list里

// 讀入庫中各欄位並加入列表框中
while(!m_pRecordset- >adoEOF)
{
var = m_pRecordset- >GetCollect("UserName");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset- >GetCollect("Password");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);

m_list.AddString( strName + " -- > "+strAge );

m_pRecordset- >MoveNext();
}

// 默認列表指向第一項,同時移動記錄指針並顯示
m_list.SetCurSel(0);

然後一大堆錯誤:
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
TestADODlg.cpp
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2065: "m_list " : undeclared identifier
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2228: left of ".AddString " must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(201) : error C2228: left of ".SetCurSel " must have class/struct/union type
Generating Code...
Error executing cl.exe.

請問什麼原因那?

------------------------------------------------------------------------------------
http://www.vckbase.com/document/viewdoc/?id=496

把文章中連接Access的語句換成:
連接SQL資料庫:
m_pConnection- >Open("Provider=SQLOLEDB.1;Server=192.168.1.6;DATABASE=mysql;UID=sa;PWD=;","","",adModeUnknown);

其中Server是SQL伺服器的名稱,DATABASE是庫的名稱

F. c連接sqlserver 2000,我只需要連接到資料庫,能取到數據就行,不需要對資料庫的內容進行更改。

using (SqlConnection cn = new SqlConnection("Data Source=(local);Initial Catalog=xxx;User ID=sa;Password=sa"))
{
try
{
cn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandText = "select * from tablename";
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
...
}
dr.Close();
dr=null;
}
catch
{
MessageBox.Show("連接資料庫失敗!");
}
}

G. vc中怎麼連接SqlServer

以下給出一個Visual C++下使用ADO的Connection對象及其Record set對象的基本步驟:

(1) 使用import指令引入ADO2組件

例:#import "C:\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")

(2) 定義CADORecordBinding 的派生類,用於程序與資料庫表欄位的交互,該類的定義可參見icrsint.h。

例:

class CIntlive : public CADORecordBinding
{
public:
DBTIMESTAMP m_datetime; //定義ADO記錄集欄位變數(與資料庫表欄位相對應)
long m_key;
long m_value;
long m_quality;
WORD m_stsdatetime; //定義ADO記錄集狀態變數
WORD m_stskey;
WORD m_stsvalue;
WORD m_stsquality;
BEGIN_ADO_BINDING(CIntlive) //將資料庫欄位與ADO記錄集欄位變數綁定
ADO_VARIABLE_LENGTH_ENTRY2(1,adDBTimeStamp,m_datetime,sizeof(m_datetime),m_stsdatetime,true)
ADO_NUMERIC_ENTRY(2,adInteger,m_key,10,0,m_stskey,true)
ADO_NUMERIC_ENTRY(3,adInteger,m_value,10,0,m_stsvalue,true)
ADO_NUMERIC_ENTRY(4,adInteger,m_quality,10,0,m_stsquality,true)
END_ADO_BINDING()
};

(3) 調用CoInitialize初始化COM ::CoInitialize(NULL);

(4) 聲明ADO的Connection對象指針和Recordset對象指針並初始化。(類型名在 msado15.dll中已定義)

例:

_ConnectionPtr pConnection1 = NULL;
_RecordsetPtr rstADO1 = NULL;

(5) 定義CADORecordBinding派生類的實例及其Bind介面指針。

例:

CIntlive m_intdata;
IADORecordBinding *rstADOBind1 = NULL;

(6) 產生Connection對象實例和Record set對象實例。

例:

pConnection1.CreateInstance(_uuidof(Connection));
rstADO1.CreateInstance(__uuidof(Recordset)) ;

(7) 連接到資料庫並打開Record set對象,其中open函數的參數的使用方法可參見微軟MSDN中ADO 相應對象參數的Basic描述。

例:

PConnection1->Open("driver={SQL server};server=servera;uid=sa;pwd=;database=pubs","","",NULL);
rstADO1->Open("data", _variant_t((IDispatch *)pConnection1,true),
adOpenKeyset,adLockBatchOptimistic, adCmdTable);

(8) 將CADORecordBinding派生類的實例聯編到Record set對象的Bind介面。

例:

RstADOBind1->BindToRecordset(&m_intdata);

(9) 對Record set對象實例進行操作。操作方法可參見微軟MSDN中ADO Record set對象相應方法的Basic描述。

例:

rstADO1->Move Next(); //移動游標到下一條記錄
rstADO1->Update(_variant_t("quality"),_variant_t("3"))); //修改記錄的quality欄位的值為3
rstADO1->Update Batch(adAffectAll)); //將在Record set對象上的所有更新一次送入資料庫

(10) 關閉Record set對象並釋放Bind介面。

例:

RstADO1->Close();
RstADOBind2->Release();

(11) 關閉連接 pConnection1->Close();

(12) 調用CoUnitialize釋放COM資源 ::CoUninitialize();