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; }