當前位置:首頁 » 數據倉庫 » c保存文件到資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c保存文件到資料庫

發布時間: 2022-05-01 19:58:46

㈠ 如何把文件存放在mysql資料庫

在my.ini文件里可以設定數據文件的存放路徑將其從原來的目錄移動到指定的位置;修改配置文件my.ini,也就是把socket和data的目錄改到你移到的位置

㈡ C語言中怎麼把運行得到的數據保存到下次運行

存入資料庫或文件
每次程序開始時從資料庫或文件中讀取
每次程序結束前將數據寫入到資料庫或文件中
舉個例子
從鍵盤輸入兩個學生數據,寫入一個文件中, 再讀出這兩個學生的數據顯示在屏幕上。
#include<stdio.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("ninput datan");
for(i=0;i<2;i++,pp++)
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
fwrite(pp,sizeof(struct stu),2,fp);
rewind(fp);
fread(qq,sizeof(struct stu),2,fp);
printf("nnnametnumber age addrn");
for(i=0;i<2;i++,qq++)
printf("%st%5d%7d%sn",qq->name,qq->num,qq->age,qq->addr);
fclose(fp);
}

㈢ C#或者VB,如何把各種文件保存進資料庫

首先,將你要保存音頻文件的資料庫表的列的數據類型設置為image(for sqlserver);
然後,將要保存的文件以流的形式讀取到一個byte[]中;
最後使用標準的insert語句就可以了。

下面附上示例代碼
創建項目

1. 添加一個名為RWTest的表到 SQL Server MYTest 資料庫。 表欄位設置如下:

a. 唯一標識欄位名稱為"ID",類型為Int。

b. 名稱為"Description"的VarChar類型的欄位,欄位長度為50。

c. 名稱為"ImgField" 的Image 類型的欄位。

2. 啟動 Visual Studio .NET, 並創建一個新的 Visual C# Windows 應用程序項目。

3. 從工具欄中拖兩個Button 控制項到默認窗體, Form1。

4. 在屬性窗口中修改Name為buttonFileToDB, Text 屬性為從文件保存到資料庫, 然後修改Name為buttonDBToFile ,Text 屬性為從資料庫保存到文件。

5 從工具欄放置2個TextBox和1個PictureBox控制項:Name屬性分別為:textBoxGetID, textBoxGetDescription, pictureBoxGetImage, 顯示從資料庫讀出的ID,Description,ImgField欄位。

源碼實例

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

using System.IO;

using System.Collections;

//資料庫說明:MyTest資料庫,RWTest表,包含3列:ID(int),Description(varchar(50),ImgField(Image)

namespace RWImgSQL

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void buttonFileToDB_Click(object sender, EventArgs e)

{

SqlConnection sqlConnection = new SqlConnection("Data Source = liuxueqin; Initial Catalog=MyTest;Integrated Security=True");

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("Select * from RWTest", sqlConnection);

SqlCommandBuilder sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter);

DataSet dataSet = new DataSet("RWTest");

sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;//確定現有 DataSet 架構與傳入數據不匹配時需要執行的操作。

String CurrentExeName = System.Diagnostics.Process.GetCurrentProcess().MainMole.FileName;

string ImageFile = System.IO.Path.GetDirectoryName(CurrentExeName) + "\\F1.jpg";

System.IO.FileStream fileStream = new FileStream(ImageFile, FileMode.OpenOrCreate, FileAccess.ReadWrite);

byte[] myData = new byte[fileStream.Length];

fileStream.Read(myData, 0, System.Convert.ToInt32(fileStream.Length));//從流中讀取位元組塊,並將數據寫入到該緩沖區

fileStream.Close();

try

{

sqlDataAdapter.Fill(dataSet, "RWTest");

//DataRow表示DataTable中的一行數據

System.Data.DataRow dataRow;

dataRow = dataSet.Tables["RWTest"].NewRow();

dataRow1["ID"] = 1;

dataRow1["Description"] = "This would be description text";

dataRow1["ImgField"] = myData;

dataSet.Tables["RWTest"].Rows.Add(dataRow);

sqlDataAdapter.Update(dataSet, "RWTest");

sqlConnection.Close();

MessageBox.Show("寫入資料庫成功!", " 信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

catch (Exception ex)

{

if (sqlConnection.State == ConnectionState.Open)

{

sqlConnection.Close();

}

MessageBox.Show("寫入資料庫失敗"+ex.Message, " 信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

private void buttonDBToFile_Click(object sender, EventArgs e)

{

SqlConnection sqlConnection = new SqlConnection("Data Source=liuxueqin;Initial Catalog=MyTest;Integrated Security=True");

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("Select * from RWTest", sqlConnection);

SqlCommandBuilder sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter);

DataSet dataSet = new DataSet("RWTest");

byte[] MyData = new byte[0];

sqlDataAdapter.Fill(dataSet, "RWTest");

DataRow myRow;

myRow = dataSet.Tables["RWTest"].Rows[0];

MyData = (byte[])myRow["imgField"];

int ArraySize = MyData.GetUpperBound(0);

String CurrentExeName = System.Diagnostics.Process.GetCurrentProcess().MainMole.FileName;

string ImageFile = System.IO.Path.GetDirectoryName(CurrentExeName) + "\\F2.jpg";

FileStream fs = new FileStream(ImageFile, FileMode.OpenOrCreate, FileAccess.Write);

fs.Write(MyData, 0, ArraySize);

fs.Close();

//---在界面上的2個textBox和1個pictureBox,用來顯示從資料庫中讀出的ID,Description,ImageField欄位

textBoxGetID.Text = myRow["ID"].ToString();

textBoxGetDescription.Text = myRow["Description"].ToString();

pictureBoxGetImage.Image = Image.FromFile(ImageFile);

if (sqlConnection.State == ConnectionState.Open)

{

sqlConnection.Close();

}

MessageBox.Show(" 從資料庫讀出數據成功!", " 信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

}

㈣ 如何把一個聲音文件以二進制形式存入資料庫(C語言)

資料庫中存聲音的欄位應為BLOB或OLE類型,以流的形式存到資料庫中或直接使用Graphic類型存儲

㈤ 我要在C#窗體中做一個文件保存到資料庫的功能,請問要用到那些控制項

pictureBox 控制項 Buttob控制項

參考代碼(顯示用戶選擇的圖片,點擊上傳按鈕之後就以二進制保存到資料庫中):

privatevoidbutton1_Click(objectsender,EventArgse)
{
if(openFileDialog1.ShowDialog()==DialogResult.OK&&openFileDialog1.FileName!="")
{
System.Drawing.BitmapobjPic;
objPic=newSystem.Drawing.Bitmap(openFileDialog1.FileName.ToString().Trim());
pictureBox1.Image=newSystem.Drawing.Bitmap(objPic,200,200);
pictureBox1.Image=Image.FromFile(openFileDialog1.FileName);
}
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
try
{
stringconString="DataSource=.;InitialCatalog=;UserID=;Pwd=";
SqlConnectionconnection=newSqlConnection(conString);
stringsql="insertcvalues(1,@TP)";
SqlCommandcommand=newSqlCommand(sql,connection);
stringpicturePath=openFileDialog1.FileName;
FileStreamfs=newFileStream(picturePath,FileMode.Open,FileAccess.Read);
Byte[]mybyte=newbyte[fs.Length];
fs.Read(mybyte,0,mybyte.Length);
fs.Close();
SqlParameterprm=newSqlParameter
("@TP",SqlDbType.VarBinary,mybyte.Length,ParameterDirection.Input,false,0,0,null,DataRowVersion.Current,mybyte);
command.Parameters.Add(prm);
connection.Open();
intresult=command.ExecuteNonQuery();
connection.Close();
if(result>0){MessageBox.Show("上傳成功!","提示");}

}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}

㈥ 如何用C語言將txt文檔中部分內容導入資料庫或取出

#include#include#includeintmain(){FILE*fin,*fout;inta,b,c,d,s;fin=fopen("f1.txt","r");//原始數據文件fout=fopen("f2.txt","w");//保存結果文件fscanf(fin,"%d%d%d%d",&a,&b,&c,&d);while(!feof(fin)){s=(int)sqrt((a-b)*(a-b)+(c-d)*(c-d));fprintf(fout,"%d\n",s);fscanf(fin,"%d%d%d%d",&a,&b,&c,&d);}fclose(fin);fclose(fout);}

㈦ 請問用C語言鏈表編寫一個電子通訊錄,採用文件版保存數據和資料庫版保存數據有什麼區別,謝謝回答

我認為在大量數據的情況下,程度對資料庫中數據的讀寫更加靈活方便,文件保存很難做到那種靈活性。比如單獨讀寫一行或幾行數據,資料庫容易做到,文件的話比較麻煩。而且大量數據的情況下,資料庫顯然更快更高效,文件做不到。

㈧ C/C++如何將數據保存在硬碟上,不用其他額外文件

sqlite資料庫就是基於文件的。如果數據不是特別大,完全可以用xml文件來保存數據

㈨ 如何用C語言將txt文件中的某些內容導入到資料庫中或者取出來

streamreader sr;
sr.readline();
sr.readline();
sr.readline();
for(i= 1->3)
string s=sr.readline();
int i=2, j ;
while(s[i]==' ') i++;
j=i;
while(s[j]!=' ') j++;
string par1=s.substring(i,j);
大概就是這樣

㈩ 如何批量獲取一個文件夾下的文件屬性,然後存入資料庫

使用Visual C++編程,有如下方法進行文件操作:

(1)使用標准C運行庫函數,包括fopen、fclose、fseek等。

(2)使用Win16下的文件和目錄操作函數,如lopen、lclose、lseek等。不過,在Win32下,這些函數主要是為了和Win16向後兼容。

(3)使用Win32下的文件和目錄操作函數,如CreateFile,CopyFile,DeleteFile,FindNextFile,等等。

Win32下,打開和創建文件都由CreateFile完成,成功的話,得到一個Win32下的句柄,這不同於「C」的fopen返回的句柄。在Win16下,該句柄和C運行庫文件操作函數相容。但在Win32下,「C」的文件操作函數不能使用該句柄,如果需要的話,可以使用函數_open_osfhandle從Win32句柄得到一個「C」文件函數可以使用的文件句柄。

關閉文件使用Win32的CloseHandle。

在Win32下,CreateFile可以操作的對象除了磁碟文件外,還包括設備文件如通訊埠、管道、控制台輸入、郵件槽等等。

(4)使用CFile和其派生類進行文件操作。CFile從CObject派生,其派生類包括操作文本文件的CStdioFile,操作內存文件的CmemFile,等等。

CFile是建立在Win32的文件操作體系的基礎上,它封裝了部分Win32文件操作函數。

最好是使用CFile類(或派生類)的對象來操作文件,必要的話,可以從這些類派生自己的文件操作類。統一使用CFile的界面可以得到好的移植性。

MFC的文件類

MFC用一些類來封裝文件訪問的Win32 API。以CFile為基礎,從CFile派生出幾個類,如CStdioFile,CMemFile,MFC內部使用的CMiororFile,等等。

CFile的結構

CFile定義的枚舉類型

CFile類定義了一些和文件操作相關的枚舉類型,主要有四種:OpenFlags,Attribute,SeekPosition,hFileNull。下面,分別解釋這些枚舉類型。

OpenFlags

OpenFlags定義了13種文件訪問和共享模式:

enum OpenFlags {

//第一(從右,下同)至第二位,打開文件時訪問模式,讀/寫/讀寫

modeRead = 0x0000,

modeWrite = 0x0001,

modeReadWrite = 0x0002,

shareCompat = 0x0000, //32位MFC中沒用

//第五到第七位,打開文件時的共享模式

shareExclusive = 0x0010,//獨占方式,禁止其他進程讀寫

shareDenyWrite = 0x0020,//禁止其他進程寫

shareDenyRead = 0x0030,//禁止其他進程讀

shareDenyNone = 0x0040,//允許其他進程寫

//第八位,打開文件時的文件繼承方式

modeNoInherit = 0x0080,//不允許子進程繼承

//第十三、十四位,是否創建新文件和創建方式

modeCreate = 0x1000,//創建新文件,文件長度0

modeNoTruncate = 0x2000,//創建新文件時如文件已存在則打開

//第十五、十六位,文件以二進制或者文本方式打開,在派生類CStdioFile中用

typeText = 0x4000,

typeBinary = (int)0x8000

};

Attribute

Attribute定義了文件屬性:正常、只讀、隱含、系統文件,文件或者目錄等。

enum Attribute {

normal = 0x00,

readOnly = 0x01,

hidden = 0x02,

system = 0x04,

volume = 0x08,

directory = 0x10,

archive = 0x20

}

SeekPosition

SeekPosition定義了三種文件位置:頭、尾、當前:

enum SeekPosition{

begin = 0x0,

current = 0x1,

end = 0x2

};

hFileNull

hFileNull定義了空文件句柄

enum { hFileNull = -1 };

CFile的其他一些成員變數

CFile除了定義枚舉類型,還定義了一些成員變數。例如:

UINT m_hFile

該成員變數是public訪問屬性,保存::CreateFile返回的操作系統的文件句柄。MFC重載了運算符號HFILE來返回m_hFile,這樣在使用HFILE類型變數的地方可以使用CFile對象。

BOOL m_bCloseOnDelete;

CString m_strFileName;

這兩個成員變數是protected訪問屬性。m_bCloseOnDelete用來指示是否在關閉文件時刪除CFile對象;m_strFileName用來保存文件名。

CFile的成員函數

CFile的成員函數實現了對Win32文件操作函數的封裝,完成以下動作:打開、創建、關閉文件,文件指針定位,文件的鎖定與解鎖,文件狀態的讀取和修改,等等。其中,用到了m_hFile文件句柄的一般是虛擬函數,和此無關的一般是靜態成員函數。一般地,成員函數被映射到對應的Win32函數,如表11-1所示。

表11-1 CFile函數對Win32文件函數的封裝

虛擬
靜態
成員函數
對應的Win32函數

文件的創建、打開、關閉


Abort
CloseHandle


Duplicate
DuplicateHandle


Open
CreateFile


Close
CloseHandle

文件的讀寫


Read
ReadFile

ReadHuge(向後兼容)
調用Read成員函數


Write
WriteFile

WriteHuage(向後兼容)
調用Write成員函數


Flush
FlushFileBuffers

文件定位


Seek
SetFilePointer

SeekToBegin
調用Seek成員函數

SeekToEnd
調用Seek成員函數


GetLength
調用Seek成員函數


SetLength
SetEndOfFile

文件的鎖定/解鎖


LockRange
LockFile


UnlockRange
UnlockFile

文件狀態操作函數


GetPosition
SetFilePointer

GetStatus(CFileStatus&)
GetFileTime,GetFileSize等


GetStatus(LPSTR lpszFileName CFileStatus&)
FindFirstFile


GetFileName
不是簡單地映射到某個函數


GetFileTitle


GetFilePath


SetFilePath


SetStatus

改名和刪除


Rename
MoveFile


Remove
DeleteFile

CFile的部分實現

這里主要討論CFile對象的構造函數和文件的打開/創建的過程。

構造函數

CFile有如下幾個構造函數:

CFile()

預設構造函數,僅僅構造一個CFile對象,還必須使用Open成員函數來打開文件。

CFile(int hFile)

已經打開了一個文件hFile,在此基礎上構造一個CFile對象來給它打包。HFile將被賦值給CFile的成員變數m_hFile。

CFile(LPCTSTR lpszFileName, UINT nOpenFlags)

指定一個文件名和文件打開方式,構造CFile對象,調用Open打開/創建文件,把文件句柄保存到m_hFile。

打開/創建文件

Open的原型如下:

BOOL CFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags,

CFileException* pException)

Open調用Win32函數::CreateFile打開文件,並把文件句柄保存到成員變數m_hFile中。

CreateFile函數的原型如下:

HANDLE CreateFile(

LPCTSTR lpFileName,// pointer to name of the file

DWORD dwDesiredAccess,// access (read-write) mode

DWORD dwShareMode,// share mode

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //pointer to security descriptor

DWORD dwCreationDistribution,// how to create

DWORD dwFlagsAndAttributes,// file attributes

HANDLE hTemplateFile// handle to file with attributes to

);

顯然,Open必須把自己的兩個參數lpszFileName和nOpenFlags映射到CreateFile的七個參數上。

從OpenFlags的定義可以看出,(nOpenFlags & 3)表示了讀寫標識,映射成變數dwAccess,可以取值為Win32的GENERIC_READ、GENERIC_WRITE、GENERIC_READ|GENERIC_WRITE。

(nOpenFlags & 0x70)表示了共享模式,映射成變數dwShareMode,可以取值為Win32的FILE_SHARE_READ、FILE_SHARE_WRITE、FILE_SHARE_WRITE|FILE_SHARE_READ。

Open定義了一個局部的SECURITY_ATTRIBUTES變數sa,(nOpenFlags & 0x80)被賦值給sa.bInheritHandle。

(nOpenFlags & modeCreate)表示了創建方式,映射成變數dwCreateFlag,可以取值為Win32的OPEN_ALWAYS、CREATE_ALWAYS、OPEN_EXISTING。

在生成了上述參數之後,先調用::CreateFile:

HANDLE hFile =::CreateFile(lpszFileName,

dwAccess, dwShareMode, &sa,

dwCreateFlag, FILE_ATTRIBUTE_NORMAL, NULL);

然後,hFile被賦值給成員變數m_hFile,m_bCloseOnDelete被設置為TRUE。

由上可以看出,CFile打開(創建)一個文件時大大簡化了:: CreateFile函數的復雜性,即只需要指定一個文件名、一個打開文件的參數即可。若該參數指定為0,則表示以只讀方式打開一個存在的文件,獨占使用,不允許子進程繼承。

在CFile對象使用時,如果它是在堆中分配的,則應該銷毀它;如果在棧中分配的,則CFile對象將被自動銷毀。銷毀時析構函數被調用,析構函數是虛擬函數。若m_bCloseOnDelete為真且m_hFile非空,則析構函數調用Close關閉文件。

至於其他CFile成員函數的實現,這里不作分析了。

CFile的派生類

這里主要簡要地介紹CStdioFile和CmemFile及CFileFind。

CStdioFile

CStdioFile對文本文件進行操作。

CStdioFile定義了新的成員變數m_pStream,類型是FILE*。在打開或者創建文件時,使用_open_osfhandle從m_hFile(Win32文件句柄)得到一個「C」的FILE類型的文件指針,然後,在文件操作中,使用「C」的文件操作函數。例如,讀文件使用_fread,而不是::ReadFile,寫文件使用了_fwrite,而不是::WriteFile,等等。m_hFile是CFile的成員變數。

另外,CStdioFile不支持CFile的Dumplicate、LockRange、UnlockRange操作,但是實現了兩個新的操作ReadString和WriteString。

CMemFile

CMemFile把一塊內存當作一個文件來操作,所以,它沒有打開文件的操作,而是設計了Attach和Detach用來分配或者釋放一塊內存。相應地,它提供了Alloc、Free虛擬函數來操作內存文件,它覆蓋了Read、Write來讀寫內存文件。

CFileFind

為了方便文件查找,MFC把有關功能歸結成為一個類CFileFind。CFileFind派生於CObject類。首先,它使用FindFile和FineNextFile包裝了Win32函數::FindFirstFile和::FindNextFile;其次,它提供了許多函數用來獲取文件的狀態或者屬性。

使用CFileStatus結構來描述文件的屬性,其定義如下:

struct CFileStatus

{

CTime m_ctime; // 文件創建時間

CTime m_mtime; // 文件最近一次修改時間

CTime m_atime; // 文件最近一次訪問時間

LONG m_size; // 文件大小

BYTE m_attribute; // 文件屬性

BYTE _m_padding; // 沒有實際含義,用來增加一個位元組

TCHAR m_szFullName[_MAX_PATH]; //絕對路徑

#ifdef _DEBUG

//實現Dump虛擬函數,輸出文件屬性

void Dump(CDumpContext& dc) const;

#endif

};

例如:

CFileStatus status;

pFile->GetStatus(status);

#ifdef _DEBUG

status.mp(afxDump);

#endif