csql操作
1、分離資料庫
exec
sp_detach_db
dataname
eg:
dataname:要分離的資料庫名
2.將資料庫一下即可備份
3、在附加資料庫
1.exec
sp_attach_single_file_db
newdataname,mdfPath
eg:
newdataname:要附加上的新資料庫名稱(可以是原來的)
mdfPath='C:/Program
Files/Microsoft
SQL
Server/MSSQL/Data/11_Data.MDF'
2.exec
sp_attach_db
newdataname,mdfPath,ldfPath
eg:
mdfPath='C:/Program
Files/Microsoft
SQL
Server/MSSQL/Data/11_Data.MDF'
ldfPath='C:/Program
Files/Microsoft
SQL
Server/MSSQL/Data/11_Log.LDF'
備注:不能操作本資料庫
eg:
string
DataName="aaa";
string
strMdf="D://test1//test//Test_Data.MDF";
string
strLdf="D://test1//test//Test_Log.LDF";
string
strsql
=
"EXEC
sp_attach_db
@dbname
=
'"+
DataName
+"',
@filename1='"+
strMdf
+"',
@filename2=
'"+strLdf+"'";
SqlConnection
myConn
=
new
SqlConnection("Data
Source=HUIQIN;Database=master;Persist
Security
Info=True;
UserID=sa;Password=sa");
SqlCommand
myCommand
=
new
SqlCommand(strsql,
myConn);
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();
㈡ 關於c語言連接SQL資料庫…
1、配置ODBC數據源。
2、使用SQL函數進行連接。
對於1、配置數據源,配置完以後就可以編程操作資料庫了。
對於2、使用SQL函數進行連接,參考代碼如下:
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
void main()
{
HENV henv; //環境句柄
HDBC hdbc; //數據源句柄
HSTMT hstmt; //執行語句句柄
unsigned char datasource[]="數據源名稱"; //即<a href="https://www..com/s?wd=ODBC&tn=44039180_cpr&fenlei=_5y9YIZ0lQzqlpA-" target="_blank" class="-highlight">ODBC</a>源中設置的源名稱
unsigned char user[]= "用戶名"; //資料庫的帳戶名
unsigned char pwd[]= "密碼"; //資料庫的密碼
unsigned char search[]="select xm from stu where xh=0";
SQLRETURN retcode; //記錄各SQL函數的返回情況
// 分配環境句柄
retcode= SQLAllocEnv(&henv); // 等介於 SQLAllocHandle(SQL_HANDLE_ENV, SQL_<a href="https://www..com/s?wd=NULL&tn=44039180_cpr&fenlei=_5y9YIZ0lQzqlpA-" target="_blank" class="-highlight">NULL</a>_HANDLE, &henv);
// 設置ODBC環境版本號為3.0
retcode= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
// 分配連接句柄
retcode= SQLAllocConnect(henv,&hdbc); // 等介於 SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//設置連接屬性,登錄超時為*rgbValue秒(可以沒有)
// SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)(rgbValue), 0);
//直接連接數據源
// 如果是windows身份驗證,第二、三參數可以是<a href="https://www..com/s?wd=NULL&tn=44039180_cpr&fenlei=_5y9YIZ0lQzqlpA-" target="_blank" class="-highlight">NULL</a>,也可以是任何字串
//SQL_NTS 即 "<a href="https://www..com/s?wd=Null&tn=44039180_cpr&fenlei=_5y9YIZ0lQzqlpA-" target="_blank" class="-highlight">Null</a>-Terminated String"
retcode= SQLConnect(hdbc,datasource, SQL_NTS, user, SQL_NTS , pwd, SQL_NTS );
//分配語句句柄
retcode= SQLAllocStmt(hdbc,&hstmt); // 等介於 SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
//直接執行查詢語句
retcode=SQLExecDirect(hstmt,search,SQL_NTS);
//將數據緩沖區綁定資料庫中的相應欄位(i是查詢結果集列號,queryData是綁定緩沖區,BUFF_LENGTH是緩沖區長度)
SQLBindCol(hstmt, i, SQL_C_CHAR, queryData[i-1], BUFF_LENGTH, 0);
//遍歷結果集到相應緩沖區 queryData
SQLFetch(hstmt);
/*
*對遍歷結果的相關操作,如顯示等
*/
//注意釋放順序,否則會造成未知錯誤!
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
代碼看上去很復雜,其實都可以直接復制。其中需要改的是數據源名稱、資料庫用戶名、資料庫密碼和SQL語句。
然後就是SQLFetch後得到結果集後,如何使用的問題了。
在下面的注釋部分 填寫你的處理代碼即可。
/*
*對遍歷結果的相關操作,如顯示等
*/
㈢ 如何在C語言裡面執行SQL語句
C語言程序與資料庫打交道的方式分為直連(同步)和非直連(非同步)兩種,它們的特點如下所示:
1. 直連方式
在該方式中,C語言程序直接與資料庫進行消息的交互。
該方式的優點是消息交互是即時的,C語言程序向資料庫發送消息之後,很快就能夠得到結果;缺點是如果資料庫執行緩慢,那麼C語言程序需要掛在那裡等待結果,影響了程序執行效率。
2. 非直連方式
在該方式中,C語言程序通過一個獨立的第三方模塊間接與資料庫進行消息的交互。
該方式的優點是當C語言程序向第三方模塊發送消息之後,可以不用等待資料庫返回結果而去執行其它流程;缺點是如果消息序列號沒有定義好,那麼極有可能會導致第三方模塊返回的結果出現混亂。因此,在該方式中,定義好發送消息的順序(即設定好序列號)很重要。
由於需要與資料庫打交道,因此要在C語言程序所使用的配置文件中填寫好關聯資料庫的相關信息,如資料庫機器的IP地址、埠號、用戶名、密碼、模塊號和所操作的具體資料庫名等。在運行程序之前,一定要確保相關配置項信息的正確性。
㈣ c語言連接SQL Server資料庫並操作表中數據的代碼沒有錯誤,但是無法執行
1、配置
ODBC數據源
。
2、使用
SQL函數
進行連接。
對於1、配置數據源,配置完以後就可以編程操作資料庫了。
對於2、使用SQL函數進行連接,參考代碼如下:
#include
#include
#include
void
main()
{
HENV
henv;
//環境
句柄
HDBC
hdbc;
//數據源句柄
HSTMT
hstmt;
//執行語句句柄
unsigned
char
datasource[]="數據源名稱";
//即源中設置的源名稱
unsigned
char
user[]=
"用戶名";
//資料庫的帳戶名
unsigned
char
pwd[]=
"密碼";
//資料庫的密碼
unsigned
char
search[]="select
xm
from
stu
where
xh=0";
SQLRETURN
retcode;
//記錄各SQL函數的返回情況
//
分配環境句柄
retcode=
SQLAllocEnv(&henv);
//
等介於
SQLAllocHandle(SQL_HANDLE_ENV,
SQL_NULL
,
&henv);
//
設置ODBC環境版本號為3.0
retcode=
SQLSetEnvAttr(henv,
SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3,
0);
//
分配連接句柄
retcode=
SQLAllocConnect(henv,&hdbc);
//
等介於
SQLAllocHandle(SQL_HANDLE_DBC,
henv,
&hdbc);
㈤ SQL的基本操作
1.創建表
(1)用Create Table 命令創建表
語法:
Create Table tabl_name
({
}column_name As computed_column_expression
}
}[,...n]
)
[On {fiegroup | Default}]
[Textimage_On {fiegroup | Default}]
例子:
打開cust資料庫,創建一個表,該表包含了學生的有關信息,即有學號、姓名、性別、出生日期、籍貫、聯系電話、住址和備注信息。
Use cust
Create Table students
(
number int not null,
name varchar(10) not null,
sex char(2) null,
birthday datetime null,
hometown varchar(30) null,
telphone_no varchar(12) null,
address varchar(30) null,
others varchar(50) null
)
在這個表中number表示學生代號,數據類型為int,不允許為空;name表示學生姓名,數據類型為varchar,長度為10,不允許為空;sex表示學生的性別,數據類型為char,長度為2,允許為空;birthday表示學生的出生日期,數據類型為datetime,允許為空;hometown表示學生的籍貫,數據類型為varchar,長度為30,允許為空;telephone_no表示學生的聯系電腦,數據類型為varchar,長度為12,允許為空;address表示學生的住址,數據類型為varchar,長度為30,允許為空;others表示學生的備注信息,長度為50,允許為空。
2.修改表的結構
(1)使用T-SQL語句增加和刪除一個新列
語法:
Alter Table table
{
ADO
{[]
|colun_name As computed_column_expression
|[]
}[,...n]
|Drop
{Column column
}[,...n]
}
例子:打開cust資料庫,修改其中的表students的結構,增加一個新欄位,欄位名為ying,數據類型是varchar,長度是10,沒有默認值,充許為空。
Use cust
Alter Table students Add ying varchar(10) null
打開cust資料庫,修改其中的表students的結構,刪除一個欄位,欄位名為ying。
Use cust
Alter Table students Drop Column ying
3.向表中插入數據
(1)用 Insert 語句
語法如下:
Insert [Into]
{table_name|view_name}[(column_list)]
{Values|values_list|select_statement}
注意:在插入數據時,字元數據和日期數據要使用引號引起來。
例子:
Use cust
Insert Into students
Values (11,"影子","男","1999-12-12","湖北","83779805","武漢市橋口區","VB愛好者")
打開cust資料庫,向students表中插入數據
(2)用Default 選項
在插入數據時,可以使用Default選項。Default選項有兩種形式,一種形式是Default Values,另一種是Default。
Default Values 形式為表中的某一行的所有列插入默認值。使用這種形式的前提條件是表中的所有列必須是這四種類型之一:Identity屬性,Timestamp數據類型,允許為Null,或者有一個指定的默認值。否則,會錯誤信息。
例子:
Use cust
Insert Into students Default Values
這個例子會出現錯誤,因為students表的number欄位是設置為不允許為空的。
Default 形式是為表中的某一列插入默認值。要插入的該列必須具備一定的條件,即該列要麼是Timestamp 數據類型,要麼是允許為Null,要麼是有一個指定的默認值,否則,會出現錯誤信息。
例子:
Use cust
Insert Into students Values(11,"影子",Default,Default,Default,Default,Default,Default)
由天前2個欄位不能為空,所以要賦值,否則會出現錯誤,而後面的6個欄位允許為空,因此可以調用Default默認。
(3)插入部分數據
在使用Insert語句插入數據是,還可以插入部分數據,也就是可以為每一行的指定的部分列插入數據。在插入部分數據時,應該注意以下三個問題:
☆在 Insert 子句中,指定要插入數據的列名。
☆在 Values 子句中,列出與列名對應的數據。列名的順序和數據的順序應該完全對應。
☆在 Insert 子句中,沒有列出的列應該至少具有這四種類型之一:Identtty 屬性,Timestamp 數據類型,允許為 Null,或者有一個指定的默認值。否則,會出現錯誤信息。
例子:
Use cust
Insert Into students (number,name)
Values (110,"影子")
打開cust資料庫,向students表中插入一行數據
注意:如用下例語句將發生錯誤,因為name欄位是不允許為空的(在創建資料庫時設定的)
Insert Into students (number)
Values (110)
(4)用 Select 語句插入多條數據
Insert 語句插入數據的特點是每一次只能插入一行數據。相反,Select 也可以用在 Insert 語句中,並且可以一次插入多條數據。使用 Select 語句插入數據的語法形式如下:
Insert table_name
Select column_list
From table_list
Where search_conditions
在使用 Select 語句插入數據時,應該注意下面幾點:
☆在 Insert 語句中使用 Select 時,他們參考的表既可以是相同的,也可以是不同的。
☆要插入數據的表必須已經存在。
☆要插入數據的表必須和 Select 的結果集兼容。兼容的含義是列的數量和順序必須相同,列的數據類型或者相同,或者SQL Server 可以自動轉換。
例子:
Use cust
Insert students
Select number,name,sex,birthday,hometown,telphone_no,address,others
From students
注意:
Select 後面的欄位要輸完整,這個例子是自己向自己插入多條數據(自己向自己插入是被允許的)
補充:
你還可以「From students」後面加上「Where name="影子"」,只插入name等於影子的記錄,可以用And 和 Or 加上多個條件。
(5)使用 Select Into 插入數據到一個新表中
帶有 Into 子句的 Select 語句允許用戶定義一個新表並且把數據插入到新表中。這種方法不同於前面講述的那些方法。在前面的那些方法中,一個共同的特點,是在數據輸入之前表已經存在。而使用 Select Into 插入數據的方法,是在插入數據的過程中建立新表。
Select Into 語句的語法如下:
Select select_list
Into new_table_name
From table_list
Where search_conditions
在使用 Select Into 插入數據時,要注意下面幾點:
☆在某個資料庫中使用 Select Into 插入數據時,設置該資料庫的 Select Into/Bulk Copy 為真。
☆新表不能存在,否則會產生錯誤信息。
☆新表中的列和行是基於查詢結果集
☆要插入的數據不記錄在日誌中。
☆在select_list 中出現的列應該使用別名,否則,新表中的列沒有列名。沒列名的表只能通過 Select * From new_table_name 的形式查詢。因此,應該為列起個別名。
☆這種方法多用在對列進行各種計算的情況。
例子:
Select number,name
Into newcust1
From students
創建新的表newcust1,插入students表中的number和name欄位的所有數據。
補充:如果要插入所有欄位的記錄,則「Select *」,也可在「From students」後加條件,方法和上個例子一樣。
(6)用 UPdate 語句修改表中的數據
Update 語句用來修改表中已存在的數據。Update 語句既可以一次修改一行數據,也可以一次修改許多行,甚至可以一次修改表中的全部數據。Update 語句使用 Where 子句指定要修改的行,使用 Set 子句給出新的數據。新數據可以是常量,也可以是指定的表達式,還可以是使用 From 子句來自其他表的數據。
Update 語句的語法如下:
Update {table_name|view_name}
Set {column_list}=expression [,. . .]
[Where clause]
在使用 Update 語句時,如果沒有使用 Where 子句,那麼就對表中所有的行進行修改。如果使用Update 語句修改數據時與數據完整性約束有沖突,那麼修改就不會發生,整個修改事務全部滾回。例如,這種沖突可能是所輸入的值是錯誤的數據類型,或者所輸入的值違背了在該列定義的規則約束,等等。
例子:
Use cust
Update students
Set name=name+"007"
Where number>100
打開cust資料庫,修改students表,使number>100的數據的name的值全部加"007"。
4.用 Delete 語句刪除表中的數據
當資料庫中的數據不需要的進修可以刪除。一般情況下,刪除數據使用 Delete 語句。Delete 語句可以一次
㈥ C語言環境下如何使用動態SQL
你真是牛人呀。資料庫類型那麼多,有oraclemysqlDB2SQLSQLsevera。你使用的那種。
相對於來說我使用oracle多。
給你一個pro*c的操作實例吧
/ 定義符號常數
#define USERNAME "SCOTT"
#define PASSWORD "x"
#include <stdio.h>
// 說明SQLCA和ORACA
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
// 啟用ORACLE通訊區:ORACA=YES,使它能被使用
EXEC ORACLE OPTION (ORACA=YES);
// 說明SQL變數
EXEC SQL BEGIN DECLARE SECTION;
char* username=USERNAME;
char* password=PASSWORD;
VARCHAR sqlstmt[80];
int emp_number;
VARCHAR emp_name[15];
VARCHAR job[50],job1[50],job2[50];
float salary;
EXEC SQL END DECLARE SECTION;
main()
{
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
// 發生錯誤時,保存SQL語句至ORACA
oraca.orastxtf=ORASTFERR;
// 登錄到ORACLE
EXEC SQL CONNECT :username IDENTIFIED BY :password;
printf("/nConnect to ORACLE./n");
// 構造動態SQL語句
sqlstmt.len=sprintf(sqlstmt.arr,"INSERT INTO EMP(EMPNO,ENAME,JOB,SAL)VALUES(:V1,:V2,:V3,:V4)");
// 顯示SQL語句
puts(sqlstmt.arr);
// 用PREPARE語句分析當前的動態INSERT語句,語句名是S
EXEC SQL PREPARE S FROM :sqlstmt;
// 循環插表
for(;;)
{
printf("/nEnter employee number:");
scanf("%d",&emp_number);
if(emp_number==0)break;
printf("/nEnter employee name:");
scanf("%s",&emp_name.arr);
emp_name.len=strlen(emp_name.arr);
printf("/nEnter employee job:");
scanf("%s",&job.arr);
job.len=strlen(job.arr);
salary = 0; // With VC6, Missing this line will cause C Run-Time Error R6002.
printf("/nEnter salary:");
scanf("%f",&salary);
EXEC SQL EXECUTE S USING :emp_number,:emp_name,:job,:salary;
}
// 提交事務,退出ORACLE
EXEC SQL COMMIT RELEASE;
printf("/nHave a good day!/n");
exit(0);
sqlerror:
// 列印錯誤信息
printf("/n%.*s/n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
// 列印出錯SQL語句
printf("/n/"%.*s.../"/n",oraca.orastxt.orastxtl,oraca.orastxt.orastxtc);
// 列印出錯SQL語句所在行號及所在文件名
printf("on line %d of %.*s/n/n",oraca.oraslnr,
oraca.orasfnm.orasfnml,oraca.orasfnm.orasfnmc);
// 回滾事務,退出ORACLE
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK RELEASE;
exit(1);
}
㈦ 如何用C實現對SQL資料庫的操作
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "util.h" #include <sqlca.h>`` EXEC SQL INCLUDE SQLCA;main(){EXEC SQL BEGIN DECLARE SECTION; char firstname[13]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO sample; EXEC SQL SELECT FIRSTNME INTO :firstname FROM employee WHERE LASTNAME = 'JOHNSON'; printf( "First name = %s\n", firstname ); EXEC SQL CONNECT RESET;return 0;}上面是一個簡單的靜態嵌入SQL語句的應用程序。它包括了嵌入SQL的主要部分: (1)中的include SQLCA語句定義並描述了SQLCA的結構。SQLCA用於應用程序和資料庫之間的通訊,其中的SQLCODE返回SQL語句執行後的結果狀態。 (2)在BEGIN DECLARE SECTION和END DECLARE SECTION之間定義了宿主變數。宿主變數可被SQL語句引用,也可以被C語言語句引用。它用於將程序中的數據通過SQL語句傳給資料庫管理器,或從資料庫管理器接收查詢的結果。在SQL語句中,主變數前均有「:」標志以示區別。 (3)在每次訪問資料庫之前必須做CONNECT操作,以連接到某一個資料庫上。這時,應該保證資料庫實例已經啟動。 (4)是一條選擇語句。它將表employee中的LASTNAME為「JOHNSON」的行數據的FIRSTNAME查出,並將它放在firstname變數中。該語句返回一個結果。可以通過游標返回多個結果。當然,也可以包含update、insert和delete語句。 (5)最後斷開資料庫的連接。 從上例看出,每條嵌入式SQL語句都用EXEC SQL開始,表明它是一條SQL語句。這也是告訴預編譯器在EXEC SQL和「;」之間是嵌入SQL語句。
㈧ 學了c語言,學了sql資料庫操作語言,能在c語言中插入sql嗎需要介面嗎
資料庫操作一般會提供專門的介面來調用。
找到提供c本版的介面。函數中調用介面。sql語句是字元串的形式輸入的在c語言中。