C#像SQL插入數據記錄常見方法:
一,sql數據庫insert into語句:
SQL語法:INSERT INTO table_name (column1,column2,column3,...)VALUES (value1,value2,value3,...);
C#操作完整語句實例代碼如下:

string sqlinsert = "Insert Into [Test2].[dbo].[CycleTimeTable]([Line],[StationName],[BarCode],[WorkerName],[CycleTime],[StandardCT],[Date])values('" + line + "','" + station + "','" + code + "','" + workername+ "','" + CT.ToString() + "','"+standardct.ToString() + "','" + dt.ToString() + "')";
注意*:當插入的值為字符時,需要把值單引號‘’,給字段值加“[]”是為了防止有字段是保留字符(都加上准沒錯)
Insert Into [Test2].[dbo].[CycleTimeTable]可以替換為:use Test2 Insert Into [dbo].[CycleTimeTable],算是兩種表達方法吧
二,用SqlParameter類來添加數據:
表示 SqlCommand 的參數,也可以是它到 DataSet 列的映射。無法繼承此類.具體的方法和屬性可到此處查看:
https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlparameter?view=dotnet-plat-ext-5.0.
在C#中的具體使用方法如下:

Sqlcon.Open(); string sqlinsert = "Insert Into ["+ line+ stationname + "].[dbo].[HumanErrorTable]([HumanErrorCateGory],[Line],[StationName],[BarCode],[ErrorCount],[WorkerName],[Date],[PicDescription],[ErrorImage])values" + "(@HumanErrorCateGory, @StationName,@BarCode,@ErrorCount,@WorkerName,@Date,@PicDescription,@ErrorImage)"; SqlCommand command = new SqlCommand(sqlinsert, Sqlcon); //HumanErrorCateGory SqlParameter parname = new SqlParameter("@HumanErrorCateGory", SqlDbType.NVarChar); parname.Value = ErrorCategory; command.Parameters.Add(parname); //Line SqlParameter parline = new SqlParameter("@Line", SqlDbType.NVarChar); parline.Value = line; command.Parameters.Add(parline); //StationName SqlParameter parastation = new SqlParameter("@StationName", SqlDbType.NVarChar); parastation.Value = stationname; command.Parameters.Add(parastation); //BarCode SqlParameter paracode = new SqlParameter("@BarCode", SqlDbType.NVarChar); paracode.Value = code; command.Parameters.Add(paracode); //ErrorCount SqlParameter paraerrcount = new SqlParameter("@ErrorCount", SqlDbType.NVarChar); paraerrcount.Value = errorcount; command.Parameters.Add(paraerrcount); //WorkerName SqlParameter paraworker = new SqlParameter("@WorkerName", SqlDbType.NVarChar); paraworker.Value = workername; command.Parameters.Add(paraworker); //Date SqlParameter paradate = new SqlParameter("@Date", SqlDbType.DateTime); paradate.Value = workername; command.Parameters.Add(paradate); //PicDescription SqlParameter paraimgdesc = new SqlParameter("@PicDescription", SqlDbType.NText); paraimgdesc.Value = workername; command.Parameters.Add(paraimgdesc); //imagedata SqlParameter parimage = new SqlParameter("@ErrorImage", SqlDbType.Image); parimage.Value = imagedata; command.Parameters.Add(parimage);
三,批量插入數據庫方法
在使用數據庫的時候,難免會遇到有需要大量插入數據庫的項目。主要有以下幾種方法:
3.1,使用sqlBULk批量插入數據庫,具體步驟和代碼如下:

//第一步:先創建一個包含需求字段的表(Datatable),我用的自定義方法如下: //為了測試,我只在表中添加了三個字段。如果需要,可以添加更多 static DataTable GetTableSchema() { DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[] { new DataColumn("User",typeof(string)), new DataColumn("PassWord",typeof(string)), new DataColumn("AuthorityLevel",typeof(string))}); return dt; } } //第二步:先把數據記錄添加到DataTable dt中,然后再執行BulKInsert //由於沒有那么多數據,這里用for循環模擬10000條數據,好像只需要200ms多就完成了 具體代碼如下: public void BulkInsert() { WatchDog.Reset(); DataTable dt = GetTableSchema(); SqlBulkCopy bulkCopy = new SqlBulkCopy(Sqlcon); bulkCopy.DestinationTableName = "[Test2].[dbo].[tb1]"; bulkCopy.BatchSize = dt.Rows.Count; WatchDog.Start(); //把所有的信息加入到表中 for (int i = 0; i <998; i++) { DataRow dr = dt.NewRow(); dr["name"] = "NameE" + i.ToString(); dr["sex"] = "sexE" + i.ToString(); dr["birthday"] = "birthdayE" + i.ToString(); dr["birthplace"] = "birthplaceE" + i.ToString(); dr["date"] = DateTime.Now; dt.Rows.Add(dr); } //執行插入表 WatchDog.Start(); bulkCopy.WriteToServer(dt); WatchDog.Stop(); }
3.2,使用for循環逐條插入,在使用SQL數據時,數據量比較少的時候,好像也挺快的,具體代碼如下:

SqlCommand command = new SqlCommand("", Sqlcon); ; for (int i = 0; i <= 10000; i++) { command.CommandText = "insert into [Test2].[dbo].[tb1] (name,sex,birthday,birthplace)values ('" + "name00" + i.ToString() + "', '" + "sex00" + i.ToString() + "', '" + "birthpday00" + i.ToString() + "', '" + "birthplace00" + i.ToString() + "')"; command.ExecuteNonQuery(); }
3.3,把要插入的語句合並成一句,然后再一起執行插入語句,當然,速度很慢,但是也是一種方法,具體代碼如下:

Sqlcon.Open(); SqlCommand command = new SqlCommand("", Sqlcon); string sql = "insert into [Test1].[dbo].[tb1] (name,sex,birthday,birthplace)values"; string sql1 = string.Empty; //合並插入語句 for (int i = 0; i <= 998; i++) { sql1 += " ('" + "name0" + i.ToString() + "', '" + "sex0" + i.ToString() + "', '" + "birthpday0" + i.ToString() + "', '" + "birthplace" + i.ToString() + "')"; if (i < 998) { sql1 += ","; } } WatchDog.Start(); command.CommandText = sql + sql1; //一次執行 command.ExecuteNonQuery(); WatchDog.Stop(); Sqlcon.Close(); //數據庫用完后一定要記得關閉
四,圖片插入數據庫的方法,方法和代碼如下:
1,先在數據數據庫中添加一個表,表中添加字段,如圖所示,例子中添加了5個字段,注意:存圖片的變量類型為“image”
2,具體代碼如下:

//因為要存入的是byte數組,所以必須要有一個函數把圖片轉換為byte[], //具體代碼如下: // <summary> /// 把圖片轉換為字節數組 /// </summary> /// <param name="imagepath"></param> /// <returns></returns> public byte[] ReadImageByte(string imagepath) { FileStream fs = new FileStream(imagepath,FileMode.Open,FileAccess.Read); byte[] byte1 = new byte[fs.Length]; fs.Read(byte1,0,Convert.ToInt32(fs.Length)); fs.Close(); return byte1; } //選擇圖片,按鈕事件 /// <summary> /// 讀取圖片信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button8_Click(object sender, EventArgs e) { OpenFileDialog opd = new OpenFileDialog(); opd.Filter = "*jpg|*JPG|*PNG|*png|*bmp|*BMP"; if(opd.ShowDialog()==DialogResult.OK) { imagedata = ReadImageByte(opd.FileName); } } //把圖片插入數據庫,會用到前面的插入數據數據方法(sqlparameter) /// <summary> /// 把圖品插入數據庫 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { if(imagedata==null) { MessageBox.Show("圖片為空"); return; } try { Sqlcon.Open(); MessageBox.Show("連接成功"); string sqlinsert = "Insert Into [PersonInfo].[dbo].[Persons]([PersonName],[PersonID],[PersonSkill1],[PersonSkill2],[PersonImage]) values(@PersonName, @PersonID,@PersonSkill1,@PersonSkill2,@PersonImage)"; SqlCommand command = new SqlCommand(sqlinsert, Sqlcon); SqlParameter parname = new SqlParameter("@PersonName", SqlDbType.NVarChar); parname.Value = "王中明"; command.Parameters.Add(parname); SqlParameter parid= new SqlParameter("@PersonID", SqlDbType.NVarChar); parid.Value = "84149536"; command.Parameters.Add(parid); SqlParameter parskill1 = new SqlParameter("@PersonSkill1", SqlDbType.NVarChar); parskill1.Value = "焊錫專技"; command.Parameters.Add(parskill1); SqlParameter parskill2 = new SqlParameter("@PersonSkill2", SqlDbType.NVarChar); parskill2.Value = "焊錫專技"; command.Parameters.Add(parskill2); SqlParameter parimage = new SqlParameter("@PersonImage", SqlDbType.Image); //imagedata可有上面的方法轉換而來 parimage.Value =imagedata; command.Parameters.Add(parimage); if (command.ExecuteNonQuery() > 0) { MessageBox.Show("插入成功"); } } catch(Exception er) { MessageBox.Show("連接失敗"+er.ToString()); } Sqlcon.Close(); }
3,既然有插入數據庫中,那么必然就有要把數據庫中的圖像數據讀取出來還原的時候,具體代碼如下:

/// <summary> /// 讀取圖片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button9_Click(object sender, EventArgs e) { byte[] imagebytes=null; string sql = "use PersonInfo select*from Persons Where PersonName='王中明'"; // SqlCommand command = new SqlCommand(sql,Sqlcon); Sqlcon.Open(); DataTable dt = new DataTable(); SqlDataAdapter adapt = new SqlDataAdapter(sql, Sqlcon); adapt.Fill(dt); imagebytes = (byte[])dt.Rows[0]["PersonImage"]; //SqlDataReader DataReader = command.ExecuteReader(); //while(DataReader.Read()) //{ // imagebytes = (byte[])DataReader.GetValue(4); //} //command.Clone(); Sqlcon.Close(); //顯示圖片 MemoryStream ms = new MemoryStream(imagebytes); Image image = System.Drawing.Image.FromStream(ms); //Bitmap bitm = new Bitmap(ms); pictureBox1.Image = image; }