1. 程式人生 > >[程式碼問題梳理]c#向Access資料庫插入資料

[程式碼問題梳理]c#向Access資料庫插入資料

近來在做一個專案,純粹拿來練手學習的,其中涉及到了C#與Access資料庫這一塊,故將其記錄下來,作為個人的成長記錄。
這篇文章主要有這幾個小內容:

  • 向Access資料庫插入資料
    • 資料的幾種情況
    • 資料插入語句的書寫
    • 注意事項

資料的幾種情況與語句的書寫

我個人認為在資料插入過程中,可以粗略地認為資料分為這三種情況:

  1. 圖片
  2. 變數
  3. 具體值

大部分向Access資料庫儲存圖片都是以存流的方式,而這種方式的思路大致是這樣的:將圖片路徑檔案流的方式讀取成二進位制數值,然後再講這些二進位制數值以字元陣列的方式儲存到資料庫中

  • 單條插入的情況下:

    • 圖片的插入書寫:
FileStream fs = new FileStream(pbimage.ImageLocation
, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader bd = new BinaryReader(fs); byte[] buffer = bd.ReadBytes((int)fs.Length); string sql="insert into [表名] (欄位1) values (@pic)"; //插入時將字元陣列作為引數傳入,@表示這是一個引數,pic表示引數名 com.CommandText=sql; com.Parameters.Add("@pic",OleDbType.Binary,(int)fs.Length
); //將其新增到引數列表中,該方法的第一個引數代表要傳入的引數名,第二個引數代表該引數的資料型別,第三個引數是檔案流的長度,fs是自定義的檔案流物件 com["@pic"].Value=buffer; //設定該引數的值,buffer是自定義的字元陣列物件
  • 變數的插入書寫
    這裡所謂的變數是指要插入欄位對應的欄位值變數,比如說,要把文字框的內容插入到Access資料庫中
    string strtxt=this.textbox1.text;
string sql="insert into [表名] (欄位2) values ('"+strtxt+"')";
//等價於這段程式碼:
string sql="
insert into [表名] (欄位) values('"+this.textbox1.text+"')";
  • 具體值的插入書寫
//假設你要傳進的某個欄位值是某個具體值,其書寫格式與上述相當
//假設目前要插入該欄位的值為100,則書寫格式如此
string sql="insert into [表名](欄位3) values('100')";

如果一條插入記錄裡需要插入這三種資料,根據上述則可得:

string sql="insert into[表名](欄位1,欄位2,欄位3) values("@pic",'"+this.textbox1.text+"','100');
com.CommandText=sql;
com.Parameters.Add("@pic",OleDbType.Binary,(int)fs.Length);
  • 多條資料插入的情況:
    在實際程式設計中,常常需要插入多條資料,比如要將DataGridView中的所有資料插入資料庫中,而Access資料庫又只能一次一條插入的時候,我們就需要學習如何將多條資料插入資料庫中。這是我在插入變數時所用的方法:
sql1 += "VALUES('" + smid + "'";
sql1 += ",'" + user + "'";
sql1 += ",'" + phonenumber + "'";
sql1 += ",'" + DvRow.Cells[0].Value.ToString() + "'";
sql1 += ",'" + point + "'";
sql1 += ",'" + DvRow.Cells[3].Value.ToString() + "'";
sql1+= "," + "@pic";
sql1 += "," + DateTime.Now.Date.ToOADate() + ")";
comm.CommandText = sql1;
comm.Parameters.Add("@pic", OleDbType.Binary, (int)fs.Length);
comm.Parameters["@pic"].Value = buffer;
  • 注意事項:
    ※出現無法執行com.ExecuteNonQuery()方法時,最好檢查一下sql語句,可能存在這些問題:
    1.如果出現關鍵字,需要用[]將關鍵字括起來。假設欄位1是該表的主鍵,那麼sql語句應該這樣書寫:
string sql="insert into[表名]([欄位1],欄位2,欄位3) values("@pic",'"+this.textbox1.text+"','100')";

2.注意表的括號:如果表名為中文,則可以不用[]號,但如果是英文,則必須要用[]將表名括起來:

//表名為使用者表
string sql="insert into 使用者表([欄位1],欄位2,欄位3) values("@pic",'"+textbox1.text+"','100')";

//表名為user
string sql="insert into [user]([欄位1],欄位2,欄位3) values("@pic",'"+textbox1.text+"','100')";

※:程式除錯過程中出現該問題:在進行資料庫操作(插入)過程中,系統提示該錯誤:由於將在索引、 主關鍵字、或關係中建立重複的值,請求對錶的改變沒有成功。 改變該欄位中的或包含重複資料的欄位中的資料,刪除索引或重新定義索引以允許重複的值並再試一次。
解決方案:重新設定表的主鍵。

※:出現某個檔案正由另一程序使用,因此該程序無法訪問該檔案。
解決方法:
重新書寫檔案流的初始化:

FileStream fs = new FileStream(pb.ImageLocation, FileMode.Open,FileAccess.Read,FileShare.ReadWrite);

相關推薦

[程式碼問題梳理]c#Access資料庫插入資料

近來在做一個專案,純粹拿來練手學習的,其中涉及到了C#與Access資料庫這一塊,故將其記錄下來,作為個人的成長記錄。 這篇文章主要有這幾個小內容: 向Access資料庫插入資料 資料的幾種情況 資料插入語句的書寫 注意事項 資料的幾種情況與語句

c#Access資料庫中批量插入大量記錄的方法

 最近有同事離職,我把他經手的專案接了過來,其中有一個功能,經過長時間運算以後,產生了17W條左右的記錄,一次性儲存到資料庫中,每次介面要卡頓1分鐘多,很是鬧心,決定修改一下 【基本情況】 c#、nhibernate、Access資料庫 【解決思路】 1、據說第一版

通過資料庫批量kettle中插入資料,建立trans和job的模板(按照不同的要求需要自行調整)

import psycopg2 # 用來操作資料庫的類 class GPCommand(object): # 類的初始化 def __init__(self): self.hostname = 'XXX.XX.X.XX' self.username

JSP資料庫插入資料(簡單註冊功能)

這篇部落格為大家講述,如何從jsp頁面中註冊一個賬號,並插入到資料庫。 首先在school資料庫下建立user表,欄位如下: 然後,建立web專案,搭建環境如下: 然後就開始我們的程式碼了。 1.首先把BaseDao.java貼上到com.tao.dao包下,li

通過資料庫批量kettle中插入資料

import psycopg2 用來操作資料庫的類 class GPCommand(object): # 類的初始化 def init(self): self.hostname = ‘10.1.2.42’

Oracle資料庫插入一條資料

這幾天搞了一下Oracle資料庫,可能用sql server習慣了,感覺好不方便。PL的介面友好度比sql server差遠了 ,既然都收購了PL了 為什麼不給它做好一點呢?各種不便。鬱悶 向Oracle伺服器插入一條資料 --不管什麼格式通通用''引號引起來。不過INTE

C# 連線ACCESS資料庫程式碼例項

 今天一個網友問到如何在C#中連線access資料庫,經查詢資料以及請教網友sammyLan,終於測試成功,大致過程如下 1、建立一個access資料庫名字為CSharptest.mdb,裡面有一個表person,它有兩個欄位personname(備註:由於name是acce

Flask 如何在程式碼中往資料庫插入資料

insert_roles(): roles = { 'User': (Permission.FOLLOW | Permission.COMMENT | Permission.WRITE_ARTICLES, True),

資料庫插入資料、修改資料時自動生成時間以及自動修改時間

資料庫中列名為:created 用於自動記錄 資料新增 的時間。 其資料型別為: timestamp 預設為:CURRENT_TIMESTAMP 修改成功後,下次新增新的資料,該列會自動記錄系統時間。 CREATE TABLE `

DuplicateKeyException異常處理:java資料庫插入資料異常

向資料庫中插入資料異常: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao

php資料庫插入資料出現亂碼問題

一般插入到資料庫的資料亂碼都是編碼的問題,可以在插入資料庫前檢視下內容的編碼方式,如果和資料庫用的編碼方式(如:utf-8)一樣就執行插入操作,不一樣就進行轉碼。 先判斷你要插入資料庫的文字的編碼方式,是utf-8就插入,不是的話要轉為utf-8之後再插入:

C#如何datatable中插入資料

首先定義一個數據表: DataTable dt = new DataTable(); 為表新增列: dt.Columns.Add("列名"); ................. 向表中新增資料: DataRow dr = dt.NewRow(); dr["欄位名"]=值

轉載:C#VFP資料庫插入Numeric型的值

最近做一個C#程式,實現將SQLServer中的資料匯入到Visual Foxpro 6.0的.dbf資料檔案中。更新Numeric型別欄位的值時出現錯誤: System.Data.Odbc.OdbcException:ERROR [22018] [Microsoft]

c#疑難(二)之Access資料庫日期資料型別的使用方法和其日期函式簡介

Access Access 資料庫的Date格式欄位值必須由一對 # 符號標識,即當Access與日期常量比較的時候,日期常量應由##包圍。 舉例一: 查詢2001-01-01至2001-01-31(即該年一月份)生日的客戶資料: 1.Select * From Custom

C# 讀取Access資料庫及php讀取伺服器上的Access資料庫

Access資料庫他是不能遠端訪問的,也就是說實際上它是單機的一個數據庫,那麼如果非要遠端訪問它那麼就需要php作為中間語言去操作Access資料庫。 我想現實使用C#在本地訪問Access資料庫。要想訪問Access資料庫,我們首先得自己建立一個數據庫檔案:在開始選單中找到 Microso

記錄一次TiDB資料庫匯入資料的例子

匯出資料 今天從Mysql的某個庫中匯出一個表大概有20分鐘吧,等了一會終於匯出成功了。檢視一下檔案的大小: [[email protected]:vg_adn_CkhsTest ~]$du -h ./creative_output.sql 41G ./creative_outpu

C#查詢ACCESS資料庫欄位和時間欄位

查詢表的所有欄位 string.Format("SELECT * FROM{0}", TableName); 查詢表中的一個欄位 在ACCESS中將欄位用CStr()轉換成字串來判斷 string.Format("SELECT* FROM {0} WHERE CStr({1})=

建立和測試觸發器:SC表插入資料時,檢查插入資料的課程號是否存在於Course表中(建立之前刪除Cno的外來鍵約束,比較外來鍵約束和觸發器之間的不同)

alter table SC Drop constraint FK_SC--刪除外來鍵約束 CREATE TRIGGER trig_insert ON SC--在SC表中建立trig_insert觸發器 AFTER INSERT--insert為觸發事件,after則為觸發的時機

mysql資料庫插入資料顯示Extracted SQL state class '22' from value '22001'解決辦法

Extracted SQL state class ‘22’ from value ‘22001’ 問題描述 最近在完成一個專案時,需要實現在網頁從excel匯入資料,然後儲存到資料庫中.在測試階段時發現執行沒有任何問題,但是實際部署過程中發現,使用者上傳exc

用SQL語句表格中插入資料

向表格中插入資料 SQL語言使用insert語句向資料庫表格中插入或新增新的資料行。Insert語句的使用格式如下:  insert into tablename  (first_column,...last_column)  values (first_v