新聞中心
隨著互聯(lián)網(wǎng)的高速發(fā)展,數(shù)據(jù)的處理和傳輸已經(jīng)成為了一項(xiàng)重要的工作。而在大量數(shù)據(jù)的處理和傳輸時(shí),為了保證數(shù)據(jù)的安全和準(zhǔn)確性,使用C語(yǔ)言結(jié)合ON格式的數(shù)據(jù)傳輸便成為了很多廠商和開發(fā)者的選擇。

1. ON格式簡(jiǎn)介
ON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,可以方便的在不同的語(yǔ)言之間傳輸數(shù)據(jù)。ON既可以用于服務(wù)器和客戶端之間的數(shù)據(jù)交互,也可以用于不同系統(tǒng)之間的通訊。ON格式具有通用性、易讀性、易用性、廣泛的支持和易于解析等優(yōu)點(diǎn),在數(shù)據(jù)傳輸和處理中使用ON格式是十分常見的。
ON格式的數(shù)據(jù)由鍵值對(duì)組成,鍵值對(duì)之間使用逗號(hào)分隔,整個(gè)數(shù)據(jù)由花括號(hào){}包圍。鍵值對(duì)由鍵和值組成,鍵和值之間使用冒號(hào):分隔。鍵和值都可以是字符串、數(shù)字、數(shù)組和對(duì)象等類型。
下面是一段ON數(shù)據(jù)的示例:
“`json
{
“name”: “Tom”,
“age”: 18,
“friends”: [“Jerry”, “Bob”, “Lucy”],
“address”: {
“province”: “Guangdong”,
“city”: “Shenzhen”
}
}
“`
在ON格式中,上述數(shù)據(jù)表示了一個(gè)人的名字、年齡、朋友以及地址信息??梢钥吹剑@個(gè)ON數(shù)據(jù)使用花括號(hào)包圍,鍵之間使用逗號(hào)分隔,每個(gè)鍵都有對(duì)應(yīng)的值。其中朋友是一個(gè)數(shù)組,地址是一個(gè)對(duì)象。
2. C語(yǔ)言中的ON庫(kù)
C語(yǔ)言本身并不支持ON格式的數(shù)據(jù)交互和處理,但我們可以使用一些第三方的ON庫(kù)來(lái)實(shí)現(xiàn)這個(gè)功能。常見的C語(yǔ)言O(shè)N庫(kù)有cON、Jansson、ON-C等,這些庫(kù)都是開源的,并且應(yīng)用廣泛。
例如,我們可以使用cON庫(kù)來(lái)解析和生成ON數(shù)據(jù)。cON是一個(gè)輕量級(jí)的C語(yǔ)言O(shè)N庫(kù),使用方便,功能完備,支持?jǐn)?shù)組和嵌套對(duì)象,能夠快速的解析、生成以及操作ON數(shù)據(jù)。
下面是cON庫(kù)的使用示例:
“`c
#include
#include
#include “cON.h”
int mn() {
// 創(chuàng)建ON對(duì)象
cON *root = cON_CreateObject();
// 添加鍵值對(duì)
cON_AddStringToObject(root, “name”, “Tom”);
cON_AddNumberToObject(root, “age”, 18);
// 添加數(shù)組
cON_AddItemToObject(root, “friends”, cON_CreateString(“Jerry”));
cON_AddItemToArray(cON_GetObjectItem(root, “friends”), cON_CreateString(“Bob”));
cON_AddItemToArray(cON_GetObjectItem(root, “friends”), cON_CreateString(“Lucy”));
// 添加對(duì)象
cON_AddItemToObject(root, “address”, cON_CreateObject());
cON_AddStringToObject(cON_GetObjectItem(root, “address”), “province”, “Guangdong”);
cON_AddStringToObject(cON_GetObjectItem(root, “address”), “city”, “Shenzhen”);
// 生成ON字符串
char *json_str = cON_Print(root);
printf(“%s\n”, json_str);
// 解析ON字符串
cON *root2 = cON_Parse(json_str);
const char *name = cON_GetObjectItem(root2, “name”)->valuestring;
int age = cON_GetObjectItem(root2, “age”)->valueint;
cON *friends = cON_GetObjectItem(root2, “friends”);
int size = cON_GetArraySize(friends);
const char *province = cON_GetObjectItem(cON_GetObjectItem(root2, “address”), “province”)->valuestring;
const char *city = cON_GetObjectItem(cON_GetObjectItem(root2, “address”), “city”)->valuestring;
printf(“name = %s\n”, name);
printf(“age = %d\n”, age);
printf(“province = %s\n”, province);
printf(“city = %s\n”, city);
for (int i = 0; i
const char *friend = cON_GetArrayItem(friends, i)->valuestring;
printf(“friend[%d] = %s\n”, i, friend);
}
// 釋放內(nèi)存
free(json_str);
cON_Delete(root);
cON_Delete(root2);
return 0;
}
“`
運(yùn)行上述程序,可以得到下面的輸出結(jié)果:
“`json
{
“name”:”Tom”,
“age”:18,
“friends”:[“Jerry”,”Bob”,”Lucy”],
“address”:{
“province”:”Guangdong”,
“city”:”Shenzhen”
}
}
name = Tom
age = 18
province = Guangdong
city = Shenzhen
friend[0] = Jerry
friend[1] = Bob
friend[2] = Lucy
“`
可以看到,上述程序使用cON庫(kù)創(chuàng)建了一個(gè)ON對(duì)象,并添加了鍵值對(duì)、數(shù)組和對(duì)象。然后,將ON對(duì)象轉(zhuǎn)換成ON字符串輸出,再通過(guò)cON_Parse函數(shù)將ON字符串解析成ON對(duì)象,然后取出對(duì)應(yīng)的值進(jìn)行使用。釋放內(nèi)存,結(jié)束程序。
3. C語(yǔ)言使用ON傳輸數(shù)據(jù)庫(kù)信息
在實(shí)際應(yīng)用中,我們可以使用C語(yǔ)言和ON格式來(lái)傳輸和處理大量的數(shù)據(jù)庫(kù)信息。在數(shù)據(jù)處理和傳輸時(shí),我們先將數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀取到內(nèi)存中,然后使用cON庫(kù)將數(shù)據(jù)轉(zhuǎn)換成ON格式的字符串,再發(fā)送給客戶端??蛻舳私邮盏絆N字符串后,可以通過(guò)解析ON字符串,將ON數(shù)據(jù)轉(zhuǎn)換成對(duì)應(yīng)的結(jié)構(gòu)體或數(shù)組,然后進(jìn)行數(shù)據(jù)處理。
例如,下面是一個(gè)簡(jiǎn)單的使用C語(yǔ)言和ON傳輸數(shù)據(jù)庫(kù)信息的示例:
“`c
#include
#include
#include
#include “cON.h”
#define DB_HOST “l(fā)ocalhost”
#define DB_USER “root”
#define DB_PASS “”
#define DB_NAME “test”
#define DB_PORT 3306
int query_database(MYSQL *con, const char *sql, cON **result) {
if (mysql_query(con, sql)) {
printf(“Error %u: %s\n”, mysql_errno(con), mysql_error(con));
return 1;
}
MYSQL_RES *res = mysql_store_result(con);
if (!res) {
printf(“Error %u: %s\n”, mysql_errno(con), mysql_error(con));
return 1;
}
int num_fields = mysql_num_fields(res);
MYSQL_FIELD *fields = mysql_fetch_fields(res);
int num_rows = mysql_num_rows(res);
cON *root = cON_CreateArray();
*result = root;
for (int i = 0; i
MYSQL_ROW row = mysql_fetch_row(res);
if (!row)
break;
cON *item = cON_CreateObject();
cON_AddItemToArray(root, item);
for (int j = 0; j
cON_AddStringToObject(item, fields[j].name, row[j] ? row[j] : “”);
}
}
mysql_free_result(res);
return 0;
}
int mn() {
MYSQL *con = mysql_init(NULL);
if (!con) {
printf(“Error %u: %s\n”, mysql_errno(con), mysql_error(con));
return 1;
}
if (!mysql_real_connect(con, DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, NULL, 0)) {
printf(“Error %u: %s\n”, mysql_errno(con), mysql_error(con));
return 1;
}
const char *sql = “SELECT * FROM users”;
cON *result = NULL;
query_database(con, sql, &result);
char *json_str = cON_Print(result);
printf(“%s\n”, json_str);
free(json_str);
cON_Delete(result);
mysql_close(con);
return 0;
}
“`
上述程序使用了MySQL數(shù)據(jù)庫(kù)和cON庫(kù)來(lái)傳輸數(shù)據(jù)庫(kù)信息。程序連接到MySQL數(shù)據(jù)庫(kù),并執(zhí)行一條查詢語(yǔ)句獲取用戶信息。查詢結(jié)果使用cON庫(kù)生成ON格式的字符串,并輸出到屏幕上。釋放內(nèi)存,關(guān)閉數(shù)據(jù)庫(kù)連接,結(jié)束程序。
4.
相關(guān)問(wèn)題拓展閱讀:
- C#怎樣實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中把數(shù)據(jù)傳到另一個(gè)數(shù)據(jù)庫(kù)中
- 如何將文本文檔批量數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中
C#怎樣實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中把數(shù)據(jù)傳到另一個(gè)數(shù)據(jù)庫(kù)中
1.假設(shè)兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)完全一致,包括所有的表結(jié)構(gòu)定義,鍵約束關(guān)系,等等,那么,你可以按下面的思路來(lái)進(jìn)行導(dǎo)庫(kù):
首先,用ADO或RDO連接指定的源數(shù)據(jù)庫(kù)A和目標(biāo)數(shù)據(jù)庫(kù)B;
其次,用查詢語(yǔ)句查詢庫(kù)A系統(tǒng)表,如果你沒用過(guò)ACCESS的系統(tǒng)表,你可以打開ACCESS后,點(diǎn)“工具”–“選項(xiàng)”,念畝在“視圖”頁(yè)里有一個(gè)“系統(tǒng)對(duì)象”,勾選后確定,你就會(huì)看到在“表”對(duì)象窗口又多出了幾個(gè)表,打開看看,就會(huì)明白,有些保存了表的名稱信息,有些保存了每個(gè)表的各列列名等等,而且一般是通過(guò)ID能夠進(jìn)行關(guān)聯(lián)查詢的。有了這些信息,我相信你生成個(gè)T-sql語(yǔ)句把每個(gè)表名稱都查出來(lái)不成問(wèn)題吧。
第三,用編程語(yǔ)言(VB、C#等)便歷每個(gè)表,用鏈接數(shù)跡高爛據(jù)庫(kù)姿漏的形式把鏈接表內(nèi)容入目的表(快辦法);或便歷每個(gè)源表后,用程序?qū)崿F(xiàn)遍歷每條記錄,逐行插入目的表(笨辦法)。
2.如果存在表間的外鍵約束,那么我建議你還是手工來(lái)進(jìn)行資料的導(dǎo)庫(kù)。另外,如果不是存在大批量導(dǎo)庫(kù)的問(wèn)題的話,我也建議你還是手工進(jìn)行導(dǎo)庫(kù),有寫程序的功夫,最少都應(yīng)該能導(dǎo)個(gè)三五遍了。
你的庫(kù)一樣不一樣啊
如果是同一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,把數(shù)據(jù)的轉(zhuǎn)移工作業(yè)務(wù)邏輯寫在存儲(chǔ)過(guò)程中,然后C#寫段程序調(diào)用存儲(chǔ)過(guò)程。
在你的數(shù)據(jù)庫(kù)上右鍵,任務(wù),導(dǎo)出數(shù)據(jù)。這個(gè)頁(yè)面是你要從哪個(gè)數(shù)據(jù)庫(kù)中導(dǎo)出數(shù)據(jù),下一步首巖,這個(gè)啟芹友頁(yè)面是你要導(dǎo)到哪個(gè)悄槐數(shù)據(jù)庫(kù),下一步,選擇之一項(xiàng),下一步,這個(gè)頁(yè)面是選擇你要導(dǎo)到另一個(gè)表的表或視圖。(表的主鍵導(dǎo)不過(guò)去)下一步,再下一步。完成。
利用構(gòu)造方法啊,例如Form2 f2=new Form2(textbox.text)
Form2 定義的時(shí)候,在鉛猜寫構(gòu)造函數(shù)時(shí)好激腔候帶個(gè)參數(shù)
public Form2(string str)
{
InitializeComponent();
label1.Text=str;
}
另外,團(tuán)IDC網(wǎng)上有許多產(chǎn)友衫品團(tuán)購(gòu),便宜有口碑
我可以說(shuō)下思路- -~
但缺基是估計(jì)數(shù)據(jù)大了內(nèi)存?zhèn)黄餞_T
為毛要在c#里做 說(shuō)說(shuō)伏源謹(jǐn)需求裂行0 0~
如何將文本文檔批量數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中
只要文件能夠用記事本打開并格式正確,就可以把他認(rèn)州鉛高為是文本文件進(jìn)行處理.
象這種格式的數(shù)據(jù)沒有什么冊(cè)尺太好的辦法,只有從文本文件中逐行讀取解析,當(dāng)讀到完整的記錄時(shí)執(zhí)行SQL語(yǔ)句插入到數(shù)激備據(jù)庫(kù)中.
asp.net/c#代碼實(shí)現(xiàn)excel to mssql數(shù)據(jù)導(dǎo)入
2023年12月17日 星期三 13:42
做網(wǎng)站項(xiàng)目時(shí),可能會(huì)遇到將excel文件中的數(shù)據(jù)導(dǎo)入至sql server數(shù)據(jù)庫(kù)的需求,把excel也看作數(shù)據(jù)庫(kù),使用OleDb連接后讀取數(shù)據(jù)然后寫入用SqlClient連接的sql server數(shù)據(jù)庫(kù)即可,技術(shù)上沒有什么難度。消配亂
但是需要考慮的一個(gè)問(wèn)題是,系統(tǒng)安裝的環(huán)境一般是專賣孫用sql server服務(wù)器+web服務(wù)器+客戶端,而excel文件往往在客戶端導(dǎo)入,如果直接使用sql語(yǔ)句讀取的話,由于sql在web服務(wù)器上運(yùn)行,不能讀取到客戶端的excel地址,就會(huì)出錯(cuò)了。
既然知道了錯(cuò)誤拿檔的原因,解決方案也就有了:
1、把客戶端的excel上傳至web服務(wù)器上某文件夾,注意要給該文件夾設(shè)置網(wǎng)絡(luò)用戶的“寫入”權(quán)限;
2、使用OleDb+sql語(yǔ)句讀取web服務(wù)器上的excel文件
3、將讀取的數(shù)據(jù)寫入到sql server 數(shù)據(jù)庫(kù)
4、將web服務(wù)器上的臨時(shí)excel刪除
部分代碼如下:
string filename = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf(“\\”));
FileUpload1.PostedFile.SaveAs(Server.MapPath(“fileupload\\”) + filename);//上傳文件
string conn = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + Server.MapPath(“fileupload\\”) + filename + “;Extended Properties=Excel 8.0”;
string sqlin = “SELECT * FROM “;
OleDbCommand olecommand = new OleDbCommand(sqlin, new OleDbConnection(conn));
OleDbDataAdapter adapterin = new OleDbDataAdapter(olecommand);
DataSet dsin = new DataSet();
adapterin.Fill(dsin);
DataTable dtin = dsin.Tables;//連接并讀取excel數(shù)據(jù)
for (i = 3; i alert(‘?dāng)?shù)據(jù)導(dǎo)入錯(cuò)誤,請(qǐng)檢查Excel文件’)”);
return;
}
}
FileInfo file = new FileInfo(Server.MapPath(“fileupload/”) + filename);
if (file.Exists)
{//刪除文件
file.Delete();
}
protected void DoSql(string sql)//執(zhí)行sql語(yǔ)句的函數(shù)
{
SqlConnection conn = new SqlConnection();//創(chuàng)建連接對(duì)象
conn.ConnectionString = ConfigurationManager.AppSettings.ToString();//給連接字符串賦值
conn.Open();//打開數(shù)據(jù)庫(kù)
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();//
conn.Close();//關(guān)閉數(shù)據(jù)庫(kù)
}
注:
1、本文代碼均取自我最近剛做的一個(gè)小項(xiàng)目,部分?jǐn)?shù)據(jù)有較強(qiáng)針對(duì)性,并不通用,只有思路通用
2、由于能力和水平問(wèn)題,部分代碼顯得有些笨拙,若能靈活運(yùn)用存儲(chǔ)過(guò)程,應(yīng)能大幅度簡(jiǎn)化代碼 只要你的文件能夠用記事本打開并格式正確,就可以把他認(rèn)為是文本文件進(jìn)行處理.
象這種格式的數(shù)據(jù)沒有什么太好的辦法,只有從文本文件中逐行讀取解析,當(dāng)讀到完整的記錄時(shí)執(zhí)行SQL語(yǔ)句插入到數(shù)據(jù)庫(kù)中.
參考:
asp.net/c#代碼實(shí)現(xiàn)excel to mssql數(shù)據(jù)導(dǎo)入
2023年12月17日 星期三 13:42
做網(wǎng)站項(xiàng)目時(shí),可能會(huì)遇到將excel文件中的數(shù)據(jù)導(dǎo)入至sql server數(shù)據(jù)庫(kù)的需求,把excel也看作數(shù)據(jù)庫(kù),使用OleDb連接后讀取數(shù)據(jù)然后寫入用SqlClient連蠢豎前接的sql server數(shù)據(jù)庫(kù)即可,技術(shù)上沒有什么難度。
但是需要考慮的一個(gè)問(wèn)題是,系統(tǒng)安裝的環(huán)境一般是專用sql server服務(wù)器+web服務(wù)器+客戶端,而excel文件往往帶清在客戶端導(dǎo)入,如果直接使用sql語(yǔ)句讀取的話,由于sql在web服務(wù)器上運(yùn)行,不能讀取到客戶端的excel地址,就會(huì)出錯(cuò)了。
既然知道了錯(cuò)誤的原因,解決方案也就有了:
1、把客戶端的excel上傳至web服務(wù)器上某文件夾,注意要給該文件夾設(shè)置網(wǎng)絡(luò)用戶的“寫入”權(quán)限;
2、使用OleDb+sql語(yǔ)句讀取web服務(wù)器上的excel文件
3、將讀取的數(shù)據(jù)寫入到sql server 數(shù)據(jù)庫(kù)
4、將web服務(wù)器上的臨時(shí)excel刪除
部分代碼如下:
string filename = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf(“\\”));
FileUpload1.PostedFile.SaveAs(Server.MapPath(“fileupload\\”) + filename);//上傳文件
string conn = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + Server.MapPath(“fileupload\\”纖沖) + filename + “;Extended Properties=Excel 8.0”;
string sqlin = “SELECT * FROM “;
OleDbCommand olecommand = new OleDbCommand(sqlin, new OleDbConnection(conn));
OleDbDataAdapter adapterin = new OleDbDataAdapter(olecommand);
DataSet dsin = new DataSet();
adapterin.Fill(dsin);
DataTable dtin = dsin.Tables;//連接并讀取excel數(shù)據(jù)
for (i = 3; i alert(‘?dāng)?shù)據(jù)導(dǎo)入錯(cuò)誤,請(qǐng)檢查Excel文件’)”);
return;
}
}
FileInfo file = new FileInfo(Server.MapPath(“fileupload/”) + filename);
if (file.Exists)
{//刪除文件
file.Delete();
}
protected void DoSql(string sql)//執(zhí)行sql語(yǔ)句的函數(shù)
{
SqlConnection conn = new SqlConnection();//創(chuàng)建連接對(duì)象
conn.ConnectionString = ConfigurationManager.AppSettings.ToString();//給連接字符串賦值
conn.Open();//打開數(shù)據(jù)庫(kù)
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();//
conn.Close();//關(guān)閉數(shù)據(jù)庫(kù)
}
注:
1、本文代碼均取自我最近剛做的一個(gè)小項(xiàng)目,部分?jǐn)?shù)據(jù)有較強(qiáng)針對(duì)性,并不通用,只有思路通用
2、由于能力和水平問(wèn)題,部分代碼顯得有些笨拙,若能靈活運(yùn)用存儲(chǔ)過(guò)程,應(yīng)能大幅度簡(jiǎn)化代碼
只要你的文件巖猛能夠世做用記事本打開并格式正確,就可以把他認(rèn)為是文本文件進(jìn)行處理.
象這種格式的數(shù)搜棗衡據(jù)沒有什么太好的辦法,只有從文本文件中逐行讀取解析,當(dāng)讀到完整的記錄時(shí)執(zhí)行SQL語(yǔ)句插入到數(shù)據(jù)庫(kù)中.
把文本文件轉(zhuǎn)成一銷清個(gè)的格鋒毀式,比如用逗號(hào)分虧基前隔
111,234,fsgds,45645,ghjgh,sdf
dfg,fgh,fghf,dfgh,dfgdf,gdfg,
tryer,yery,ret,ertey,uti,yuiyu
關(guān)于c json傳大批量數(shù)據(jù)庫(kù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線路電信、移動(dòng)、聯(lián)通等。
文章標(biāo)題:C語(yǔ)言使用ON傳輸大量數(shù)據(jù)庫(kù)信息(cjson傳大批量數(shù)據(jù)庫(kù))
當(dāng)前鏈接:http://www.fisionsoft.com.cn/article/djigjhj.html


咨詢
建站咨詢
